




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 网络与数据通信技术,俞成海,教学任务与目标,教学任务 USB 编程 Wi-Fi 编程 蓝牙编程 Socket实现技术 HTTP 协议通信实现技术 教学重点 蓝牙编程 Socket实现技术,USB 编程,两种模式来支持Android USB外设 :USB外设模式和USB主机模式 在USB外设模式下,外部USB硬件(装有Android的设备要连接的外部设备)充当USB主机。外设的例子包括机器人、扩展插座、诊断和音乐设备、电子报亭、读卡器等其他设备,这种模式给予不具备主机功能的Android设备以与USB硬件交互的能 力。 在USB主机模式下,装有Android的设备扮演着主机的角色。这种设
2、备的例子包括数码像机,键盘,鼠标和游戏手柄。那些适应面很广的USB设备仍可以与Android应用交互,前提是这些Android应用可以正确的与这些设备通讯。,USB主机模式,常用的类: UsbManager:允许您枚举已连接的USB设备并且与其进行“交流”。 UsbDevice:代表了一个已连接的USB的设备并且包含具有该设备验证信息,接口和接口点的方法。 UsbInterface:代表了一个USB设备的一个接口,该接口定义了一系列关于设备的函数。一个设备在进行“交流”的时候可以有一个或者多个接口 UsbEndpoint:代表一个接口的接口点,该接口点就是这个接口的通信信道。一个接口可以有一个
3、或者多个这样的接口点,而且一般都是有输入和输出双向通信的接口点。 UsbDeviceConnection:代表该设备的一个连接,用来在接点上传输数据。这个类允许您能用同步或者异步的方式发送和返回数据。 UsbRequest:在通过UsbDeviceConnection和设备进行“交流”的一个异步请求。 UsbConstants:关于在linux内核中linux/usb/ch9.h的相关定义的USB常量,使用步骤(见附件),为了让应用可以发现一个USB设备,需要android.hardware.usb.action.USB_DEVICE_ATTACHED这个意图指定一个意图来进行过滤 获取USB
4、信息 UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap deviceList = manager.getDeviceList(); UsbDevice device =deviceList.get(deviceName); 和设备通信 UsbInterfaceintf=device.getInterface(0); UsbEndpointendpoint=intf.getEndpoint(0); UsbDeviceConnectionconnection=manager.openDe
5、vice(device); connection.claimInterface(intf,true); connection.bulkTransfer(endpoint,bytes,bytes.length,0); 终止通信 当你完成数据的传输或者你的设备已拔出时,通过调用releaseInterface()和close()来关闭接口和连接。,Wi-Fi 编程ConnectivityManager,NetworkInfo mWiFiNetworkInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI),所
6、需要用到的wifi相关Android包:.wifi 常见操作主要包括以下及各类和接口: 1、WifiManager 提供了管理WiFi连接的大部分API,主要包括如下内容: 查看已经配置好的网络清单,而且可以修改个别记录的属性。 可以建立或是关闭WiFi网络连接,并且可以查询有关网络状态的动态信息。 对接入点的扫描结果包含足够的信息来决定需要与什么接入点建立连接。 同时还定义了许多常量来表示WiFi状态的改变。 常用的方法:getWiFiState , isWifiEnabled,setWifiEnabled,startScan,getScanResults等等,基于Android的WiFi相
7、关库函数,WiFi相关库函数,所需要用到的wifi相关Android包:.wifi 常见操作主要包括以下及各类和接口: 2、WifiConfiguration WiFi网络的配置,包括安全配置等。 3.WifiInfo WiFi无线连接的描述,包括接入点、网络连接状态、隐藏的接入点,ip地址、连接速度、mac地址、网络id,信号强度等信息。 4.ScanResult 主要用来描述已经检测出的接入点,包括接入点的地址、接入点的名称、身份认证、频率、信号强度等信息。,找到周围AP的关键步骤,检测网卡状态,修改网卡状态开启,进行扫描周围ap,打印结果 class ListWifiListerner
8、implements OnClickListener Override public void onClick(View v) wifiManager = (WifiManager)WifiActivity.this.getSystemService(Context.WIFI_SERVICE); wifiManager.startScan(); mWifiList = wifiManager.getScanResults(); for(int i=0;imWifiList.size();i+) sb.append(new Integer(i).toString()+.); sb.append(
9、mWifiList.get(i).toString(); sb.append(n); mainText.setText(sb); sb.delete(0, sb.capacity(); ,蓝牙编程,,使用蓝牙进行设备通信,主要包含四个部分:蓝牙设置、搜索设备、连接、传输数据 BluetoothAdapter 代表本地蓝牙适配器(蓝牙发射器),是所有蓝牙交互的入。通过它可以搜索其它蓝牙设备,查询已经配对的设备列表,通过已知的MAC地址创建BluetoothDevice,创建BluetoothServerSocket监听来自其它设备的通信。 BluetoothDevice 代表了一个远端的蓝牙设备
10、, 使用它请求远端蓝牙设备连接或者获取 远端蓝牙设备的名称、地址、种类和绑定状态。 BluetoothSocket 代表了一个蓝牙套接字的接,是应用程 序通过输、输出流与其他蓝牙设备通信的连接点。 BluetoothServerSocket 代表打开服务连接来监听可能到来的连接请求 (属于 server 端) , 为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。 BluetoothClass 描述了一个设备的特性(profile)或该设备上的蓝牙一致可以提供哪些服务(service),但不可信。比如,设备是一个电话、计算机或手持设备;设备可以提供audio/telephony服
11、务等。可以用它来进行一些UI上的提示。,BluetoothHeadset 提供手机使用蓝牙耳机的支持。这既包括蓝牙耳机和免提(V1.5)模式。 BluetoothA2dp 定义高品质的音频,可以从一个设备传输到另一个蓝牙连接。 “A2DP的”代表高级音频分配模式。 BluetoothHealth 代表了医疗设备配置代理控制的蓝牙服务 BluetoothHealthCallback一个抽象类,使用实现BluetoothHealth回调。你必须扩展这个类并实现回调方法接收更新应用程序的注册状态和蓝牙通道状态的变化。 BluetoothHealthAppConfiguration 代表一个应用程序的
12、配置,蓝牙医疗第三方应用注册与远程蓝牙医疗设备交流。 BluetoothProfile.ServiceListener 当他们已经连接到或从服务断开时通知BluetoothProfile IPX的客户时一个接(即运行一个特定的配置文件,内部服务)。,BlueTooth使用,至少要在AndroidManifest.xml中声明两个权限:BLUETOOTH和 BLUETOOTH_ADMIN 获取BluetoothAdapter,打开蓝牙:通过isEnabled()来检查蓝牙当前是否可用。如果这个方法返回false,则蓝牙不能够使用。为了请求蓝牙使用,呼叫startActivityForResult
13、()与的ACTION_REQUEST_ENABLE动作意图获取BluetoothAdapter,查找匹配设备,扫描设备 开始搜索设备,调用startDiscovery() 。该函数是异步的,调用后立即返回,返回值表示搜索是否成功开始。 应用中可以注册一个带ACTION_FOUND Intent的BroadcastReceiver,搜索到每一个设备时都接收到消息。Intent携带着而外的字段信息EXTRA_DEVICE和EXTRA_CLASS,分别包含一个BluetoothDevice和一个BluetoothClass。 使用cancelDiscovery()来停止搜索,使能被发现 如果想让本地
14、设备被其他设备发现,可以带ACTION_REQUEST_DISCOVERABLE action Intent调用startActivityForResult(Intent, int) 方法,作为服务器连接 通过持有个打开的BluetoothServerSocket对象。服务器socket的作用是侦听进来的连接,如果一个连接被接受,提供一个连接好的BluetoothSocket对象。,建立服务器socket和接收一个连接的基本步骤,1.通过调用listenUsingRfcommWithServiceRecord(String, UUID)得到一个BluetoothServerSocket对象,当
15、客户端试图连接本设备,它将携带一个UUID用来唯一标识它要连接的服务,UUID必须匹配,连接才会被接受。 2.通过调用accept()来侦听连接请求。这是一个阻塞的调用,直到有连接进来或者产生异常才会返回。只有远程设备发送一个连接请求,并且携带的UUID与侦听它socket注册的UUID匹配,连接请求才会被接受。如果成功,accept()将返回一个连接好的BluetoothSocket对象。 3.除非需要再接收另外的连接,否则的话调用close() 。close()释放server socket和它的资源,但不会关闭连接accept()返回的连接好的BluetoothSocket对象。,作为客
16、户端连接,1.用BluetoothDevice调用createRfcommSocketToServiceRecord(UUID)获取一个BluetoothSocket对象。 这个初始化的BluetoothSocket会连接到BluetoothDevice。 2.调用connect()完成连接 当调用这个方法的时候,系统会在远程设备上完成一个SDP查找来匹配UUID。如果查找成功并且远程设备接受连接,就共享RFCOMM信道,connect()会返回。这也是一个阻塞的调用,不管连接失败还是超时(12秒)都会抛出异常。,管理连接 如果已经连接了两个设备,他们都已经拥有各自的连接好的Bluetooth
17、Socket对象。可以在设备间共享数据了。使用BluetoothSocket,传输任何数据通常来说都很容易了: 1.通过socket获取输入输出流来处理传输(分别使用getInputStream()和getOutputStream() )。 2.用read(byte)和write(byte)来实现读写。,基于Socket网络编程,Socket网络通信的组成元素 服务器,主要功能:侦听连接、接收连接、接收数据和向客户端发送数据。 客户端,主要功能:发起连接、接收数据和向服务器发送数据 Socket网络通信的基本原理,IP地址 : 主机标识 端 口 : 服务类型,Socket = IP(addre
18、ss) + Port(server),基于Socket网络通信方式,主要使用类,Java的Socket属于流式套接字通信,采用TCP协议,提供面向连接的服务,实现可靠的通信。,J提供两个类,实现Socke通信:,ServerSocket - 服务器端 Socket - 客户端通,操作TCP 套接字的发送和接收需要借助java.io包的 InputStream / OutputStream 完成,分别通过方法实现: Socket.getInputStream() / Socket.getOutputStream(),Socket/ServerSocket构造函数,Socket() 通过系统默认类
19、型的 SocketImpl 创建未连接套接字 Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号 Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 创建一个套接字并将其连接到指定远程端口上的指定远程地址 Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号 Socket(String host, int port, InetAddress localAdd
20、r, int localPort) 创建一个套接字并将其连接到指定远程主机上的指定远程端口,ServerSocket() 创建非绑定服务器套接字 ServerSocket(int port) 创建绑定到特定端口的服务器套接字 ServerSocket(int port, int backlog) 利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号 ServerSocket(int port, int backlog, InetAddress bindAddr) 使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器,Socket/ServerSock
21、et主要方法,Socke通信机制,Socke通信机制,Server端,Client端,service = ServerSocket (port_number) 创建service对象,以TCP服务实现端口监听 socket = ServerSocket.accept() 创建socke对象, 接收用户访问请求,Socket = Socket (port_number) 创建socke对象,建立连接,发送访问请求,InputStream Socket对象输入流OutputStream Socket对象输出流 通过socke对象实现与Client端数据传输,OutputStream Socket对
22、象输出流 InputStream Socket对象输入流 通过socke对象,实现与Servert端数据传输,socket.close() 关闭Socke关闭结束与Client端的连接 service. close() 关闭监听程序,socket.close() 关闭Socke 结束与Server端的连接,(1) 建立连接,(2) 数据通讯,(3) 拆除连接,客户端,开启INTERNET 布局界面(Main.xml) 获取资源(EditText,Button,TextView) Socket通信 数据读写(DataInputStream/DataOutputStream),客户端主要代码: p
23、ublic void onClick(View v) Socket s = null; DataOutputStream dout = null; DataInputStream din = null; if(v = button1)/点击的是按钮 try s = new Socket(02, 8888);/连接服务器 dout = new DataOutputStream(s.getOutputStream();/得到输出流 din = new DataInputStream(s.getInputStream();/得到输入流dout.writeUTF(editText
24、.getText().toString();/向服务器发送消息textView.setText(服务器发来的消息: + din.readUTF();/接收服务器发来的消息 ,catch (Exception e) e.printStackTrace();/打印异常信息 finally try if(dout != null) dout.close();/关闭输入流 if(din != null) din.close();/关闭输入流 if(s != null) s.close();/关闭Socket连接 catch(Exception e) e.printStackTrace();/打印异常信
25、息 ,服务器(例子),ServerSocket Accept DataInputStream/DataOutputStream Read/Write,服务器端主要代码: ServerSocket ss = null;/ServerSocket的引用 Socket s = null;/Socket的引用 DataInputStream din = null; DataOutputStream dout = null; try ss = new ServerSocket(8888);/监听到8888端口 System.out.println(已监听到8888端口!); catch(Exceptio
26、n e) e.printStackTrace();/打印异常信息 while(true) try s = ss.accept();/等待客户端连接 din = new DataInputStream(s.getInputStream(); dout = new DataOutputStream(s.getOutputStream();/得到输入输出流 String msg = din.readUTF();/读一个字符串 System.out.println(ip: + s.getInetAddress();/打印客户端IP System.out.println(msg: + msg);/打印客
27、户端发来的消息 System.out.println(=); dout.writeUTF(Hello Client!);/向客户端发送消息 catch(Exception e) e.printStackTrace();/打印异常信息 ,基于HTTP协议的网络编程,统一资源定位器URL: URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。 URL的组成 protocol:/r
28、esourceName 协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gropher、file等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如: 协议名:/主机名 协议名:/机器名文件名 :80/Gamelan/network.html#BOTTOM 协议名:/机器名端口号文件名内部引用.,创建一个URL 为了表示URL, 中实现了类URL。我们可以通过下面的构造方法来初始化一个URL对象: (1) public URL (String spec); (2) public URL(URL conte
29、xt, String spec); (3) public URL(String protocol, String host, String file); (4) public URL(String protocol, String host, int port, String file); 解析一个URL 一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性 从URL读取WWW网络资源 当我们得到一个URL对象后,就可以通过它读取指定的WWW资源。,通过HttpURLConnetction连接WWW 通过URL的方法openStream(),我们只能从
30、网络上读取数据,如果我们同时还想输出数据,例如向服务器端的CGI程序发送一些数据,我们必须先与URL建立连接,然后才能对其进行读写,这时就要用到类URLConnection了。CGI是公共网关接口(Common Gateway Interface)的简称,它是用户浏览器和服务器端的应用程序进行连接的接口,有关CGI程序设计,请读者参考有关书籍。 类HttpURLConnetction也在包中定义,它表示Java程序和URL在网络上的通信连接。当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的HttpURLConnetction对象。如果连接过程
31、失败,将产生IOException.,HttpURLConnection ucon = null; BufferedReader reader = null; StringBuilder bab=null; try URL myURL = new URL(http:/localhost/test.html);/初始化URL ucon = (HttpURLConnection)myURL.openConnection();/打开连接 ucon.setRequestMethod(GET); ucon.connect(); reader =new BufferedReader(new InputSt
32、reamReader(ucon.getInputStream(),gb2312);/得到输入流 String currentline; bab = new StringBuilder(); while(currentline=reader.readLine() != null) bab.append(currentline);/将收到的信息添加到StringBuilder中 bab.append(rn); jsonstring=bab.toString(); catch (Exception e) e.printStackTrace();/打印异常信息 finally try if(reade
33、r!=null) reader.close(); catch (IOException e) e.printStackTrace(); ,What is JSON,JavaScript Object Notation 轻量级的数据交换格式 描述数据的格式 轻量级(格式简单,一个页面的官网) 易于人阅读和编写 易于机器解析和生成 独立于语言文本格式,使用场景,早期是网页浏览器与Web服务器之间交互数据的格式 与XML一起作为Ajax返回的两种主要格式 由于其轻量级的原因,逐渐成为主流的数据交换格式,对象,对象,无序的“名称/值对”集合 一个对象以“”(左括号)开始,“”(右括号)结束 每个“名称
34、”后跟一个“:”(冒号),再后跟着值,构成一个“名称/值对” 每个“名称/值对”之间用“,”(逗号)分隔 例如: name: Li Lei, Gender: male, age: 35 ,数组,数组,有序的值的集合 一个数组以“”(左中括号)开始,“”(右中括号)结束 值之间使用“,”(逗号)分隔 例如: 1, 2, 3, 4, 5, 6, 7, 8, 9 A, B, C, D ,值,值的类型,字符串 数值 true false null 对象 数组,字符串,数值,JSON 数据解析,解析JSON 数据时,首先需要明确待解析的是JSON Object 还是JSON Array,然后再解析 JS
35、ON Object,name 为名称,Lili 是name 的值,将name 和Lili 用“:”隔开,其文本形如:name:Lili / 新建JSONObject, jsonString 字符串中为上面的JSON 对象的文本 JSONObject demoJson = new JSONObject(jsonString); / 获取name 名称对应的值 String s = demoJson.getString(name);,解析JSON Array 一个简单的JSONArray,number 为数组名称,1,2,3为数组的内容,其JSON文本表示如:number:1,2,3,/ 新建JS
36、ONObject 对象,将jsonString 字符串转换为JSONObject 对象 / jsonString 字符串为上面的文本 JSONObject demoJson = new JSONObject(jsonString); / 获取number 对应的数组 JSONArray numberList = demoJson.getJSONArray(number); / 分别获取numberList 中的每个值 for(int i=0; inumberList.length(); i+) / 因为数组中的类型为int,所以为getInt,其他getString、getLong 具有类似的
37、用法 System.out.println(numberList.getInt(i); ,使用Volley框架,目的:图像缓存,请求的调度,特点,自动调度网络请求 多个并发的网络连接 通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致 支持请求优先级 支持取消请求的强大API,可以取消单个请求或多个 易于定制 健壮性:便于正确的更新UI和获取数据 包含调试和追踪工具,Volley使用,下载Volley 构建一个RequestQueue,RequestQueue requestQueue=Volley.newRequestQueue(this);/这里的this指的是Context,创建一个
38、Request,private final String url=http:/xxxxx/所需url JsonObjectRequest req=new JsonObjectRequest(url,null,new Response.Listener() Override public void onResponse(JsonObject response) , new ResponseError.Listener() Override public void onResponseError(VollerError error) );,将req添加到requestQueue,Gson使用,下载
39、,放入libs目录,/name:name0,age:0 Person person = gson.fromJson(str, Person.class);,/name:name0,age:0,name:name1,age:5,name:name2,age:10 List ps = gson.fromJson(str, new TypeToken().getType();,实例,使用糯米团的api接口,分析, errno: 0, msg: success, deals: deal_id: 11078851, image: *, tiny_image: *, title: 漫火锅, min_tit
40、le: 漫火锅100元代金券, description: 王府井店100元代金券!可叠加使用,节假日通用,提供免费WiFi!, market_price: 10000, current_price: 9000, promotion_price: 9000, sale_num: 1159, score: 4.85, comment_num: 26, deal_url: *, deal_murl: * , ,public class contentbean String deal_id; String image; String tiny_image; String title; String min_title; String description; float market_price; float current_p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 母猪健康跟踪与数据利用研究试题及答案
- 系统架构设计师考试评估模型试题及答案
- 护士资格证考试患者积极健康管理考题及答案
- 紧跟趋势的2024文化产业管理考试试题及答案
- 美术史论尝试题及答案大全
- 广东建造师试题及答案
- 系统规划与管理师复习中的知识点掌握要领试题及答案
- 药品研发流程学习试题及答案
- 系统规划与管理师考试流程解析试题及答案
- 推动护士资格证备考多元化的试题及答案
- 2024年江苏事业单位真题下载
- 2024-2025学年江苏省南京市竹山中学七年级下学期3月月考英语试题及答案
- 房地产行业未来走势与机遇分析
- ISO27001:2022信息安全管理体系全套文件+表单
- 系统本地部署协议合同
- 2025年中国色度仪行业发展运行现状及投资策略研究报告
- 路基排水工程首件施工方案
- 上海市黄浦区2025届高三高考二模地理试卷(含答案)
- 2025年淄博市光明电力服务有限责任公司招聘笔试参考题库含答案解析
- 游乐场区块链数据共享-全面剖析
- 2024年陕西省县以下医疗卫生机构定向招聘考试真题
评论
0/150
提交评论