版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 网络与数据通信技术俞成海俞成海教学任教学任务USB 编程Wi-Fi 编程蓝牙编程Socket实现技术HTTP 协议通信实现技术教学重点蓝牙编程Socket实现技术US两种模式来支持Android USB外设 :USB 外设模式和USB主机模式 在 USB 外设模式下,外部 USB 硬件(装有Android的设备要连接的外部设备)充当 USB 主机。外设的例子包括机器人、扩展插座、诊断和音乐设备、电子报亭、读卡器等其他设备,这种模式给予不具备主机功能的 Android 设备以与USB硬件交互的能 力。在USB主机模式下,装有 Android 的设备扮演着主机的角色。这种设备的例子包括数码
2、像机,键盘,鼠标和游戏手柄。那些适应面很广的USB设备仍可以与Android应用交互,前提是这些Android应用可以正确的与这些设备通讯。 http:/ manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap deviceList = manager.getDeviceList(); UsbDevice device =deviceList.get(deviceName); 和设备通信和设备通信 UsbInterface intf= device.getInterface(0); UsbEndpoint en
3、dpoint= intf.getEndpoint(0); UsbDeviceConnection connection= manager.openDevice(device); connection.claimInterface(intf, true); connection.bulkTransfer(endpoint, bytes, bytes.length, 0); 终止通信终止通信 当你完成数据的传输或者你的设备已拔出时,通过调用releaseInterface()和close()来关闭接口和连接。Wi-Fi 编程ConnecerNetworkInfo mWiFiNetworkInfo
4、= mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)所需要用到的wifi相关Android包:.wifi常见操作主要包括以下及各类和接口:1、WifiManager 提供了管理WiFi连接的大部分API,主要包括如下内容:查看已经配置好的网络清单,而且可以修改个别记录的属性。可以建立或是关闭WiFi网络连接,并且可以查询有关网络状态的动态信息。对接入点的扫描结果包含足够的信息来决定需要与什么接入点建立连接。同时还定义了许多常量来表示WiFi状态的改变。常用的方法:getWiFiState , isWifiEna
5、bled,setWifiEnabled,startScan,getScanResults等等WiFi所需要用到的所需要用到的wifi相关相关Android包:包:.wifi常见操作主要包括以下及各类和接口:常见操作主要包括以下及各类和接口:2、WifiConfigurationWiFi网络的配置,包括安全配置等。网络的配置,包括安全配置等。3.WifiInfoWiFi无线连接的描述,包括接入点、网络连接状态、隐藏的接无线连接的描述,包括接入点、网络连接状态、隐藏的接入点,入点,ip地址、连接速度、地址、连接速度、mac地址、网络地址、网络id,信号强度等信信号强度等信息。息。4.ScanRes
6、ult主要用来描述已经检测出的接入点,包括接入点的地址、接入主要用来描述已经检测出的接入点,包括接入点的地址、接入点的名称、身份认证、频率、信号强度等信息。点的名称、身份认证、频率、信号强度等信息。找到周围A检测网卡状态,修改网卡状态检测网卡状态,修改网卡状态开启,进行扫描周围开启,进行扫描周围ap,打印结果打印结果class ListWifiListerner implements OnClickListenerOverride public void onClick(View v) wifiManager = (WifiManager)WifiActivity.this.getSystem
7、Service(Context.WIFI_SERVICE);wifiManager.startScan(); mWifiList = wifiManager.getScanResults(); for(int i=0;imWifiList.size();i+) sb.append(new Integer(i).toString()+.); sb.append(mWifiList.get(i).toString(); sb.append(n); mainText.setText(sb); sb.delete(0, sb.capacity(); 蓝牙,使用蓝牙进行设备通信,主要包含四个部分:蓝牙设
8、置、搜索设备、连接、传输数据BluetoothAdapter 代表本地蓝牙适配器(蓝牙发射器),是所有蓝牙交互的入。通过它可以搜索其它蓝牙设备,查询已经配对的设备列表,通过已知的MAC地址创建BluetoothDevice,创建BluetoothServerSocket监听来自其它设备的通信。BluetoothDevice 代表了一个远端的蓝牙设备, 使用它请求远端蓝牙设备连接或者获取 远端蓝牙设备的名称、地址、种类和绑定状态。 BluetoothSocket 代表了一个蓝牙套接字的接,是应用程 序通过输、输出流与其他蓝牙设备通信的连接点。BluetoothServerSocket 代表打开服
9、务连接来监听可能到来的连接请求 (属于 server 端) , 为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。 BluetoothClass 描述了一个设备的特性(profile)或该设备上的蓝牙一致可以提供哪些服务(service),但不可信。比如,设备是一个电话、计算机或手持设备;设备可以提供audio/telephony服务等。可以用它来进行一些UI上的提示。BluetoothHeadset 提供手机使用蓝牙耳机的支持。这既包括蓝牙耳机和免提(V1.5)模式。BluetoothA2dp 定义高品质的音频,可以从一个设备传输到另一个蓝牙连接。 “A2DP的”代表高级音频分
10、配模式。BluetoothHealth 代表了医疗设备配置代理控制的蓝牙服务BluetoothHealthCallback一个抽象类,使用实现BluetoothHealth回调。你必须扩展这个类并实现回调方法接收更新应用程序的注册状态和蓝牙通道状态的变化。BluetoothHealthAppConfiguration 代表一个应用程序的配置,蓝牙医疗第三方应用注册与远程蓝牙医疗设备交流。BluetoothProfile.ServiceListener 当他们已经连接到或从服务断开时通知BluetoothProfile IPX的客户时一个接(即运行一个特定的配置文件,内部服务)。BlueT至少要
11、在AndroidManifest.xml中声明两个权限:BLUETOOTH和 BLUETOOTH_ADMIN获取BluetoothAdapter打开蓝牙:通过isEnabled()来检查蓝牙当前是否可用。如果这个方法返回false,则蓝牙不能够使用。为了请求蓝牙使用,呼叫startActivityForResult()与的ACTION_REQUEST_ENABLE动作意图获取BluetoothAdapter查找匹配设备扫描设备开始搜索设备,调用开始搜索设备,调用startDiscovery() 。该函数是异步的,调用后立即返回,。该函数是异步的,调用后立即返回,返回值表示搜索是否成功开始。返回
12、值表示搜索是否成功开始。应用中可以注册一个带应用中可以注册一个带ACTION_FOUND Intent的的BroadcastReceiver,搜,搜索到每一个设备时都接收到消息。索到每一个设备时都接收到消息。Intent携带着而外的字段信息携带着而外的字段信息EXTRA_DEVICE和和EXTRA_CLASS,分别包含一个,分别包含一个BluetoothDevice和一和一个个BluetoothClass。使用使用cancelDiscovery()来停止搜索来停止搜索使能被发现如果想让本地设备被其他设备发现,可以带ACTION_REQUEST_DISCOVERABLE action Inten
13、t调用startActivityForResult(Intent, int) 方法作为服务器连接通过持有通过持有个打开的个打开的BluetoothServerSocket对对象。服务器象。服务器socket的作用是侦听进来的连接,如的作用是侦听进来的连接,如果一个连接被接受,提供一个连接好的果一个连接被接受,提供一个连接好的BluetoothSocket对象。对象。建立服务器socket1.通过调用listenUsingRfcommWithServiceRecord(String, UUID)得到一个BluetoothServerSocket对象,当客户端试图连接本设备,它将携带一个UUID用
14、来唯一标识它要连接的服务,UUID必须匹配,连接才会被接受。2.通过调用accept()来侦听连接请求。这是一个阻塞的调用,直到有连接进来或者产生异常才会返回。只有远程设备发送一个连接请求,并且携带的UUID与侦听它socket注册的UUID匹配,连接请求才会被接受。如果成功,accept()将返回一个连接好的BluetoothSocket对象。3.除非需要再接收另外的连接,否则的话调用close() 。close()释放server socket和它的资源,但不会关闭连接accept()返回的连接好的BluetoothSocket对象。作为客1.用BluetoothDevice调用creat
15、eRfcommSocketToServiceRecord(UUID)获取一个BluetoothSocket对象。 这个初始化的BluetoothSocket会连接到BluetoothDevice。2.调用connect()完成连接 当调用这个方法的时候,系统会在远程设备上完成一个SDP查找来匹配UUID。如果查找成功并且远程设备接受连接,就共享RFCOMM信道,connect()会返回。这也是一个阻塞的调用,不管连接失败还是超时(12秒)都会抛出异常。管理连接如果已经连接了两个设备,他们都已经拥有各自的连接好的BluetoothSocket对象。可以在设备间共享数据了。使用BluetoothS
16、ocket,传输任何数据通常来说都很容易了:1.通过socket获取输入输出流来处理传输(分别使用getInputStream()和getOutputStream() )。2.用read(byte)和write(byte)来实现读写。基于SockSocket网络通信的组成元素服务器,主要功能:侦听连接、接收连接、接收数据和向客户端发送数据。客户端,主要功能:发起连接、接收数据和向服务器发送数据Socket网络通信的基本原理IP地址 : 主机标识端 口 : 服务类型Socket = IP(address) + Port(server)Java-Internet语言语言具备强大网络通信功能具备强大
17、网络通信功能基于套接字(Socket)通信方式流套接字TCP协议协议(Transmission Control Protocol)UDP协议协议 (User Datagram Protocol)数据报套接字主要 Java的的Socket属于流式套接字通信,采用属于流式套接字通信,采用TCP协议,提协议,提供面向连接的服务,实现可靠的通信。供面向连接的服务,实现可靠的通信。 J提供两个类,实现Socke通信:ServerSocket - 服务器端 Socket - 客户端通 操作TCP 套接字的发送和接收需要借助java.io包的 InputStream / OutputStream 完成,分别
18、通过方法实现:Socket.getInputStream() / Socket.getOutputStream()Socket/Serv Socket() 通过系统默认类型的通过系统默认类型的 SocketImpl 创建未连接套接字创建未连接套接字 Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定创建一个流套接字并将其连接到指定 IP 地址的指定端口号地址的指定端口号 Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 创建一个套接字并
19、将其连接到指定远程端口上的指定远程地址创建一个套接字并将其连接到指定远程端口上的指定远程地址 Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号创建一个流套接字并将其连接到指定主机上的指定端口号 Socket(String host, int port, InetAddress localAddr, int localPort) 创建一个套接字并将其连接到指定远程主机上的指定远程端口创建一个套接字并将其连接到指定远程主机上的指定远程端口ServerSocket() 创建非绑定服务器套接字 ServerSocket(int port)
20、创建绑定到特定端口的服务器套接字 ServerSocket(int port, int backlog) 利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号 ServerSocket(int port, int backlog, InetAddress bindAddr) 使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器 Socket/ServSockOutputStream获得获得Socket对象输出流对象输出流建立Socket连接通过流传输数据服务端联结成功联结成功获得已连接的获得已连接的Socket对象对象Socket (host,por
21、t)Socket (host,port) 创建创建Socket对象对象向指定主机端口发出连接请求向指定主机端口发出连接请求客户端Socket对象ServerSocket对象InputStream获得获得Socket对象输入流对象输入流申请连接ServiceSocket.close()停止提供停止提供TCP连接服务连接服务一个一个ServerSocket对象和一个对象和一个Socket对象对象一个一个Socket对象对象Socket.close()关闭关闭TCP连接连接ServerSocket (port)创建创建ServiceSocke对象对象,提供提供TCP连接服务连接服务accept ()
22、在指定的端口监听客户端请求联结创建在指定的端口监听客户端请求联结创建InputStream获得获得Socket对象输入流对象输入流Socket.close()关闭关闭TCP连接连接OutputStream获得获得Socket对象输出流对象输出流ServerSocket对象访问监听SockServer端Client端service = ServerSocket (port_number)创建service对象,以TCP服务实现端口监听socket = ServerSocket.accept()创建socke对象, 接收用户访问请求Socket = Socket (port_number)创建so
23、cke对象,建立连接,发送访问请求InputStream Socket对象输入流OutputStream Socket对象输出流通过socke对象实现与Client端数据传输OutputStream Socket对象输出流InputStream Socket对象输入流通过socke对象,实现与Servert端数据传输socket.close() 关闭Socke关闭结束与Client端的连接service. close()关闭监听程序socket.close() 关闭Socke结束与Server端的连接(1)建立连接(2)数据通讯(3)拆除连接客开启INTERNET布局界面(Main.xml)获
24、取资源(EditText,Button,TextView)Socket通信数据读写(DataInputStream/DataOutputStream)客户端主要代码:public 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();/
25、得到输出流din = new DataInputStream(s.getInputStream();/得到输入流dout.writeUTF(editText.getText().toString();/向服务器发送消息textView.setText(服务器发来的消息: + din.readUTF();/接收服务器发来的消息 catch (Exception e) e.printStackTrace();/打印异常信息 finally tryif(dout != null)dout.close();/关闭输入流if(din != null)din.close();/关闭输入流if(s != n
26、ull)s.close();/关闭Socket连接catch(Exception e)e.printStackTrace();/打印异常信息服务器ServerSocketAcceptDataInputStream/DataOutputStreamRead/Write服务器端主要代码:ServerSocket ss = null;/ServerSocket的引用Socket s = null;/Socket的引用DataInputStream din = null;DataOutputStream dout = null;tryss = new ServerSocket(8888);/监听到88
27、88端口System.out.println(已监听到8888端口!);catch(Exception e)e.printStackTrace();/打印异常信息while(true)trys = ss.accept();/等待客户端连接din = new DataInputStream(s.getInputStream();dout = new DataOutputStream(s.getOutputStream();/得到输入输出流String msg = din.readUTF();/读一个字符串System.out.println(ip: + s.getInetAddress();/打
28、印客户端IPSystem.out.println(msg: + msg);/打印客户端发来的消息System.out.println(=);dout.writeUTF(Hello Client!);/向客户端发送消息catch(Exception e)e.printStackTrace();/打印异常信息统一资源定位器URL:URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源
29、。URL的组成protocol:/resourceName协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gropher、file等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:http:/ 协议名:/主机名http:/ 协议名:/机器名文件名http:/:80/Gamelan/network.html#BOTTOM 协议名:/机器名端口号文件名内部引用.创建一个创建一个URL为了表示URL, 中实现了类URL。我们可以通过下面的构造方法来初始化一个URL对象:(1) public URL (Str
30、ing spec);(2) public URL(URL context, 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资源。通过通过HttpURLCo
31、nnetction连接连接WWW 通过URL的方法openStream(),我们只能从网络上读取数据,如果我们同时还想输出数据,例如向服务器端的CGI程序发送一些数据,我们必须先与URL建立连接,然后才能对其进行读写,这时就要用到类URLConnection了。CGI是公共网关接口(Common Gateway Interface)的简称,它是用户浏览器和服务器端的应用程序进行连接的接口,有关CGI程序设计,请读者参考有关书籍。类HttpURLConnetction也在包中定义,它表示Java程序和URL在网络上的通信连接。当与一个URL建立连接时,首先要在一个URL对象上通过方法openCo
32、nnection()生成对应的HttpURLConnetction对象。如果连接过程失败,将产生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
33、(); reader =new BufferedReader(new InputStreamReader(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.prin
34、tStackTrace();/打印异常信息 finally try if(reader!=null) reader.close(); catch (IOException e) e.printStackTrace(); What iJavaScript Object Notation轻量级的数据交换格式描述数据的格式轻量级(格式简单,一个页面的官网)易于人阅读和编写易于机器解析和生成独立于语言文本格式使用早期是网页浏览器与Web服务器之间交互数据的格式与XML一起作为Ajax返回的两种主要格式由于其轻量级的原因,逐渐成为主流的数据交换格式对对无序的“名称/值对”集合一个对象以“”(左括号)开始
35、,“”(右括号)结束每个“名称”后跟一个“:”(冒号),再后跟着值,构成一个“名称/值对”每个“名称/值对”之间用“,”(逗号)分隔例如: name: Li Lei, Gender: male, age: 35 数数有序的值的集合一个数组以“”(左中括号)开始,“”(右中括号)结束值之间使用“,”(逗号)分隔例如: 1, 2, 3, 4, 5, 6, 7, 8, 9 A, B, C, D 值的字符串数值truefalsenull对象数组字数JSON 解析JSON 数据时,首先需要明确待解析的是JSON Object 还是JSON Array,然后再解析JSON Object,name 为名称,
36、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/ 新建JSONObject 对象,将jsonString 字符
37、串转换为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 具有类似的用法System.out.println(numberList.g
38、etInt(i);使用Vol目的:图像缓存,请求的调度特自动调度网络请求多个并发的网络连接通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致支持请求优先级支持取消请求的强大API,可以取消单个请求或多个易于定制健壮性:便于正确的更新UI和获取数据包含调试和追踪工具Voll下载Volley构建一个RequestQueueRequestQueue requestQueue=Volley.newRequestQueue(this);/这里的this指的是Context创建一个Requestprivate final String url=http:/xxxxx/所需url JsonObjectR
39、equest req=new JsonObjectRequest(url,null,new Response.Listener() Override public void onResponse(JsonObject response) , new ResponseError.Listener() Override public void onResponseError(VollerError error) );将req添加到requestQueueGso下载,放入libs目录/name:name0,age:0Person person = gson.fromJson(str, Person.
40、class);/name:name0,age:0,name:name1,age:5,name:name2,age:10List ps = gson.fromJson(str, new TypeTokenList().getType();实使用糯米团的api接口http:/ errno: 0, msg: success, deals: deal_id: 11078851, image: *, tiny_image: *, title: 漫火锅, min_title: 漫火锅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;floa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会计记账合作协议书范本
- 个人赞助借款协议书范本
- 会计师事务所员工住房团购协议
- 临沂文化设施行业劳动合同模板
- 人力资源服务分包合同模板
- 互联网金融服务协议
- 二手空调机组蒸发器购销合同样本
- 三方合作医疗协议样本
- 企业入驻战略代理权合同
- 仓库卷帘门维修施工合同
- 围产期母婴感染B族链球菌的防治及专家共识防治指南PPT课件院内培训
- 铁路基础知识考试题库500题(单选、多选、判断)
- 多媒体会议室维护维保方案书
- 【失败案例】“疯太阳”郑州亚细亚集团的陨落亚细亚(战略和体制)
- 大学化学-物质结构基础
- 医院印章使用申请表
- 摩托车有限公司产品零部件编码原则与国内车型代码资料汇编
- WINCC满足FDA规范配置说明分解
- 煤场机械车辆操作规程
- JJG 1030-2007超声流量计
- GB 30254-2013高压三相笼型异步电动机能效限定值及能效等级
评论
0/150
提交评论