324Android无线网络通信解析_第1页
324Android无线网络通信解析_第2页
324Android无线网络通信解析_第3页
324Android无线网络通信解析_第4页
324Android无线网络通信解析_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android无线网络通信无线网络通信 Android支持的通信模式 ?GSM ?EDGE ?3G ?WIFI ?BLUETOOTH ?NFC ? GSM 全球移动通信系统 (Global System for Mobile Communications) 当前应用最为广泛的移动电 话标准。全球超过200个国家和 地区超过10亿人正在使用GSM电 话。 GSM ? GSM标准的广泛使用使得在移动电 话运营商之间签署“漫游协定”后 用户的国际漫游变得很平常。 ? GSM较之它以前的标准最大的不同 是他的信令和语音信道都是数字的, 因此GSM被看作是第二代(2G)移 动电话系统。GSM标准当前由

2、3GPP组织负责制定和维护。 EDGE 增强型数据速率GSM演进技术 Enhanced Data Rate for GSM Evolution ?从GSM到3G的过渡技术 ?能够充分利用现有的GSM资源 ?弹性优势 ?工作在TDMA和GSM网络 ?提高了GPRS信道编码效率及 其高速移动数据标准 第三代移动通信技术( 3rd-generation,3G) 3G就是指IMT-2000(International Mobile Telecommunications-2000),是国际电信联盟 (ITU)定义的第三代无线通信的全球标准。 IMT-2000规定移动终端的连接速度: ? ? ? 以车速移

3、动时 144Kbps 室外静止或步行时384Kbps 室内 2Mbps 第四代移动通信技术( 4rd-generation,4G) LTE-Advanced的相关特性如下: 带宽:100MHz 峰值速率:下行1Gbps,上行500Mbps 峰值频谱效率:下行30bps/Hz,上行15bps/Hz 802.16m,WirelessMAN-Advanced: WirelessMAN-Advanced有5种网络数据规格,其 中极低速率为16kbps,低数率数据及低速多媒体 为144kbps,中速多媒 体为2Mbps,高速多媒体 为30Mbps超高速多媒体则达到了30Mbps- 1Gbps。 WiFi

4、 Wireless Fidelity,中文译为“无线兼容认证” ? 实质一种商业认证 ? 技术短程无线传输 ? 现状带WiFi的便携式设备是潮流 WiFi 常见的WiFi使用形式无线路由器 ? 覆盖范围70至120米 ? 使用场合公司、家庭、公共场所 ? 优点方便的建立局域网、 低成本、使用简单 WiFi特点 WiFi相比其他技术有如下一些特点: ? 无线电波的覆盖范围广 ? 传输速度高 ? 使用门槛比较低 ? 消除布线的麻烦 ? 发射功率低,健康安全 Bluetooth 定义: ? 开放式无线通讯标准 蓝牙的标志 ? 设备短距离互联解决方案 优势: ? 无需驱动程序独特的配置文件 ? 小型化

5、无线电 ? 低功率、低成本、安全性、稳固 ? 易于使用、即时连接 Bluetooth 蓝牙协议栈: ? 核心协议层(HCI、LMP、L2CAP、 SDP) ? 线缆替换协议层(RFCOMM) ? 电话控制协议层(TCS-BIN) ? 选用协议层(PPP、TCP、IP、UDP、 OBEX、IrMC、WAP、WAE) Bluetooth 蓝牙规范(profile)为了保证蓝牙设备的互通 性而制定的一系列规范: ? 蓝牙立体声音频传输规范(A2DP) ? 基本图像规范(BIP) ? 基本打印规范(BPP) ? 无线电话规范(CTP) ? 蓝牙耳机规范(HP) ? 文件传输规范(FTP) ? NFC

6、Near Field Communication(近场通讯) 技术起源: NFC由非接触式射频识别(RFID) 及互联互通技术整合演变而来,在 单一芯片上结合感应式读卡器、 感应式卡片和点对点的功能,能 在短距离内与兼容设备进行识别 和数据交换。 NFC 技术优势: ? 轻松、安全、迅速的通信 ? 传输范围小独特的信号衰减技术 ? 带宽高、能耗低 应用场合: ? 门禁、公交 ? 手机支付 Android提供的网络接口 Android平台提供了三种网络接口,它们分别是: ? .* ? org.apache.* ? .* 开发人员可以使用这些接口方便的进行Android网络编程。 Android

7、Wifi开发 Android SDK提供的相关包:.wifi ScanResult 用于描述一个已经被检测到的wifi接入点。 WifiConfiguration 该类代表了一个已经配置好的wifi网络, 包括了该网络的一些安全设置。例如接 入点密码,接入点通讯所采用的安全标 准。 WifiConfiguration. 公认的IEEE 802.11标准认证算法。 AuthAlgorithm Android Wifi相关类介绍 WifiConfiguration.GroupCipher WifiConfiguration.KeyMgmt 公认的组密码。 公认的密钥管理方案。 WifiConfig

8、uration.PairwiseCipher 公认的用于WPA的成对密 码标准。 WifiConfiguration.Protocol WifiConfiguration.Status 公认的安全协议 网络所可能存在的状态。 Android Wifi相关类介绍 WifiInfo 描述了各个wifi连接的状态, 该连接是否处于活动状态或 者是否处于识别过程中。 这个类比较重要。它提供了 用于管理wifi连接的各种主要 API。详见表后说明。 WifiManager WifiManager.MulticastLock WifiManager.WifiLock 允许应用程序接收wifi的多播 数据包

9、。 允许应用程序永久地保持wifi 连接(防止系统自动回收)。 Android Wifi开发 Android 操作WiFi的重要类WifiManager 这个类提供了最主要的用于管理wifi连接的API。 通过调用Context.getSystemService(Context.WIFI_SERVICE) 方法来得到系统提供的WifiManager,代码如下: WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); Android Wifi开发 WifiManager主要用

10、于处理下面一些事务: ? 已经配置好的网络连接列表。这个列表可以被用户查看或者更新, 而且可以通过它来修改个别接入点的属性; ? 如果当前有连接存在的话,可以得到当前正处于活动状态的wifi连 接的控制权,可以通过它建立或者断开连接,并且可以查询该网络 连接的动态信息; ? 通过对已经扫描到的接入点的足够信息来进行判断,得出一个最好 的接入点进行连接。 ? 定义了很多用于系统广播通知的常量,它们分别代表了WiFi状态的 改变。 Android Wifi开发 补充:Android网络连接管理类ConnectivityManager 该类用于管理抽象意义上的“网络连接” 它的主要作用是: ? 监控

11、网络连接(包括WiFi,GPRS,UMTS等等); ? 当网络连接发生改变时,向系统广播这一改变; ? 当失去了当前的网络连接时,尝试切换到另外一个连接; ? 提供了允许其他应用程序调用的API让应用程序可以方便地查 询当前的网络状态。 Android Wifi权限获取 要在应用程序中对Android系统的WiFi设备进行相关操作, 需要在项目中的AndroidManifest.xml中选择性地添加如下几句 用于声明权限的语句: Android Wifi开发代码示例 /取得WifiManager对象 mWifiManager = (WifiManager) context.getSystemS

12、ervice(Context.WIFI_SERVICE); /取得WifiInfo对象 mWifiInfo = mWifiManager.getConnectionInfo(); /打开WIFI publicpublic voidvoid openWifi() ifif (!mWifiManager.isWifiEnabled() mWifiManager.setWifiEnabled(truetrue); Android Wifi开发代码示例 /关闭WIFI publicpublic voidvoid closeWifi() ifif (!mWifiManager.isWifiEnabled

13、() mWifiManager.setWifiEnabled(falsefalse); /得到WifiLock,以便应用程序保持wifi连接 publicpublic voidvoid acquireWifiLock() mWifiLock.acquire(); Android Wifi开发代码示例 /解锁WifiLock publicpublic voidvoid releaseWifiLock() ifif (mWifiLock.isHeld() /判断是否被锁定 mWifiLock.acquire(); /创建WifiLock publicpublic voidvoid creatWif

14、iLock() mWifiLock = WifiManager.createWifiLock(Lock); Android Wifi开发代码示例 /得到已经配置好的网络列表 publicpublic List getConfiguration() returnreturn mWifiConfiguration; /选择一个已配置好的网络进行连接 publicpublic voidvoid connectConfiguration(intint index) /索引大于配置好的网络索引返回 ifif(index mWifiConfiguration.size() returnreturn; /连

15、接配置好的指定ID的网络 mWifiManager.enableNetwork(mWifiConfiguration.get(ind ex) .networkId, truetrue); Android Wifi开发代码示例 /扫描接入点 publicpublic voidvoid startScan() mWifiManager.startScan(); /得到扫描结果 mWifiList = mWifiManager.getScanResults(); /得到已经配置好的网络列表 mWifiConfiguration = mWifiManager.getConfiguredNetworks

16、(); /得到网络连接列表 publicpublic List getWifiList() returnreturn mWifiList; Android 蓝牙开发 Android SDK提供的相关包:android.bluetooth API主要为应用程序提供如下几个功能: ? 1. 搜寻有效范围内的蓝牙设备; ? 2. 通过本地的蓝牙适配器来查询到与之配对的蓝牙设备; ? 3. 在配对的蓝牙设备之间建立RFCOMM信道; ? 4. 连接到其他设备的指定端口; ? 5. 在设备之间传输数据。 Android 蓝牙API android.bluetooth包括了以下两个接口: 接口名接口名 B

17、luetoothProfile 描述描述 蓝牙规范的公用API接口,所有的蓝 牙规范都必须实现这个接口。Profile 目的是要确保 Bluetooth设备间的互 通性。 BluetoothProfile.Servi 用于在蓝牙客户设备连接或者断开 ceListener 连接时给它们发出通知的接口。 Android 蓝牙API android.bluetooth包括了以下一些类: 类名类名 描述描述 BluetoothA2dp 这个类作为对 BluetoothProfile接口实 现的实例,这是对蓝牙的 A2DP规范 的API实现类。 代表了本地的蓝牙适配器。 蓝牙的指令编号。 代表蓝牙的类,

18、这个类描述了蓝牙设 备的特征和性能参数。 BluetoothAdapter BluetoothAssignedN umbers BluetoothClass Android 蓝牙API 类名类名 BluetoothClass.Device 描述描述 定义了所有的device类所用的常量。 BluetoothClass.Device.定义了所有主要的 device类所用的常 Major 量。 BluetoothClass.Service 定义了所有的service类所用的常量。 BluetoothHeadset 实现蓝牙耳机服务的公共API。 Android 蓝牙API android.blue

19、tooth中用于建立连接的类: 类名类名 描述描述 BluetoothServerSocket 用于监听socket连接请求的类。 BluetoothSocket 一个已连接的或正在连接的 socket类。 类似于Java API中的ServerSocket和Socket类 Android 蓝牙权限获取 要在应用程序中对Android系统的蓝牙设备进行相关 操作,需要在项目中的 AndroidManifest.xml 中添加: Android 蓝牙示例TestBluetooth 运行截图:运行截图: (项目文件保存在/workspace目录,项目名称TestBluetooth) 程序初始化 打

20、开蓝牙 允许搜索 正在搜索 Android 蓝牙示例TestBluetooth TestBluetooth项目文件结构: 源码包名:com.bluetooth 主Activity:BluetoothActivity 查找蓝牙Activity:DiscoveryActivity 工具类(对话框功能):SamplesUtils 执行查找界面的布局:discovery.xml 主界面布局:main.xml Android 蓝牙示例TestBluetooth AndroidManifest.xml: 接下页 Android 蓝牙示例TestBluetooth AndroidManifest.xml(续

21、): 配置本机蓝牙模块配置本机蓝牙模块 01 BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); 02 /直接打开系统的蓝牙设置面板 03 Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 04 startActivityForResult(intent, 0 x1); 05 /直接打开蓝牙 06 adapter.enable(); 07 /关闭蓝牙 08 /adapter.disable(); 09 /打开本机的蓝牙发现功能(默认

22、打开120秒,可以将时间最多延长至300秒) 10 discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); 搜索蓝牙设备搜索蓝牙设备 使用BluetoothAdapter的startDiscovery()方法来搜索蓝牙设备 startDiscovery()方法是一个异步方法,调用后会立即返回。该方法会进 行对其他蓝牙设备的搜索,该过程会持续12秒。该方法调用后,搜索过程 实际上是在一个System Service中进行的,所以可以调用 cancelDiscovery()方法来停止搜索(该方法

23、可以在未执行discovery请求时 调用)。 请求Discovery后,系统开始搜索蓝牙设备,在这个过程中,系统会发 送以下三个广播: ACTION_DISCOVERY_START:开始搜索 ACTION_DISCOVERY_FINISHED:搜索结束 ACTION_FOUND:找到设备,这个Intent中包含两个extra fields: EXTRA_DEVICE和EXTRA_CLASS,分别包含BluetooDevice和 BluetoothClass。 注册相应的注册相应的BroadcastReceiver来接收通知:来接收通知: 01 / 创建一个接收ACTION_FOUND广播的B

24、roadcastReceiver 02 private final BroadcastReceiver mReceiver = new BroadcastReceiver() 03 public void onReceive(Context context, Intent intent) 04 String action = intent.getAction(); 05 / 发现设备 06 if (BluetoothDevice.ACTION_FOUND.equals(action) 07 / 从Intent中获取设备对象 08 BluetoothDevice device = intent.

25、getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 09 / 将设备名称和地址放入array adapter,以便在ListView中显示 10 mArrayAdapter.add(device.getName() + n + device.getAddress(); 11 12 13 ; 14 / 注册BroadcastReceiver 15 IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 16 registerReceiver(mReceiver, f

26、ilter); / 不要忘了之后解除绑定 Android 蓝牙建立连接 如果打算建议两个蓝牙设备之间的连接,则必须实现服务器端与客户端的机 制。当两个设备在同一个RFCOMM channel下分别拥有一个连接的 BluetoothSocket,这两个设备才可以说是建立了连接。 1. 1. 本机作为服务端参与连接的建立本机作为服务端参与连接的建立 通过listenUsingRfcommWithServiceRecord(String, UUID)方法来得 到一个BluetoothServerSocket对象,方法中的String参数代表了本机的名 称,UUID是用于蓝牙设备之间相互识别的唯一识别

27、码,当这个UUID在客户 端和服务端是同一个值时才能够建立起连接,在蓝牙通讯中起着十分重要 的作用。 mServerSocket=mAdapter.listenUsingRfcommWithServiceRecord(NAME, UUID); 然后通过mServerSocket的accept()方法开始监听连接到这个端口的请求。 mServerSocket.accept(); 该监听线程会一直阻塞直到有新的请求到来,除非在程序中人为的调用 mServerSocket的close()方法。 01 private class AcceptThread extends Thread 02 priva

28、te final BluetoothServerSocket mmServerSocket; 03 04 public AcceptThread() 05 / Use a temporary object that is later assigned to mmServerSocket, 06 / because mmServerSocket is final 07 BluetoothServerSocket tmp = null; 08 try 09 / MY_UUID is the apps UUID string, also used by the client code 10 tmp

29、= mBluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID); 11 catch (IOException e) 12 mmServerSocket = tmp; 13 14 15 public void run() 16 BluetoothSocket socket = null; 17 / Keep listening until exception occurs or a socket is returned 18 while (true) 19 try 20 socket = mmServerSocket.a

30、ccept(); 21 catch (IOException e) 22 break; 23 24 / If a connection was accepted 25 if (socket != null) 26 / Do work to manage the connection (in a separate thread) 27 manageConnectedSocket(socket); 28 mmServerSocket.close(); 29 break; 30 31 32 33 34 /* Will cancel the listening socket, and cause th

31、e thread to finish */ 35 public void cancel() 36 try 37 mmServerSocket.close(); 38 catch (IOException e) 39 40 Android 蓝牙建立连接 2. 本机作为客户端参与连接的建立本机作为客户端参与连接的建立 通过使用BluetoothDevice类来得到BluetoothSocket,这样将会得到 一个用于连接到远程蓝牙设备的BlueSocket对象,这里用到的参数MY_UUID 必须和服务端的UUID是同一个数值,否则不能够建立起连接。 mSocket= device.createRf

32、commSocketToServiceRecord(MY_UUID); 得到了BluetoothSocket对象后,通过调用它的connect()方法,建立起到 服务器的一条专用的蓝牙连接。 注意:在调用注意:在调用connect()方法之前,应当确定当前没有搜索设备,否则连接方法之前,应当确定当前没有搜索设备,否则连接 会变得非常慢并且容易失败会变得非常慢并且容易失败 01 private class ConnectThread extends Thread 02 private final BluetoothSocket mmSocket; 03 private final Bluetoo

33、thDevice mmDevice; 04 05 public ConnectThread(BluetoothDevice device) 06 / Use a temporary object that is later assigned to mmSocket, 07 / because mmSocket is final 08 BluetoothSocket tmp = null; 09 mmDevice = device; 10 11 / Get a BluetoothSocket to connect with the given BluetoothDevice 12 try 13

34、/ MY_UUID is the apps UUID string, also used by the server code 14 tmp = device.createRfcommSocketToServiceRecord(MY_UUID); 15 catch (IOException e) 16 mmSocket = tmp; 17 18 19 public void run() 20 / Cancel discovery because it will slow down the connection 21 mBluetoothAdapter.cancelDiscovery(); 22

35、 23 try 24 / Connect the device through the socket. This will block 25 / until it succeeds or throws an exception 26 mmSocket.connect(); 27 catch (IOException connectException) 28 / Unable to connect; close the socket and get out 29 try 30 mmSocket.close(); 31 catch (IOException closeException) 32 r

36、eturn; 33 34 35 / Do work to manage the connection (in a separate thread) 36 manageConnectedSocket(mmSocket); 37 38 39 /* Will cancel an in-progress connection, and close the socket */ 40 public void cancel() 41 try 42 mmSocket.close(); 43 catch (IOException e) 44 45 连接管理(数据通信)连接管理(数据通信) 分别通过Bluetoo

37、thSocket的getInputStream()和getOutputStream()方法获取 InputStream和OutputStream 使用read(bytes)和write(bytes)方法分别进行读写操作 注意:read(bytes)方法会一直block,直到从流中读取到信息,而 write(bytes)方法并不是经常的block(比如在另一设备没有及时read或者中间 缓冲区已满的情况下,write方法会block) 01 private class ConnectedThread extends Thread 02 private final BluetoothSocket mmSocket; 03 private final InputStream

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论