Android蓝牙开发课案.docx
- 文档编号:2943945
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:17
- 大小:27.39KB
Android蓝牙开发课案.docx
《Android蓝牙开发课案.docx》由会员分享,可在线阅读,更多相关《Android蓝牙开发课案.docx(17页珍藏版)》请在冰豆网上搜索。
Android蓝牙开发课案
Android平台包含了对蓝牙网络协议栈的支持,它允许一个蓝牙设备跟其他的蓝牙设备进行无线的数据交换。
应用程序通过Android蓝牙API提供访问蓝牙的功能。
这些API会把应用程序无线连接到其他的蓝牙设备上,具有点到点和多点无线特征。
使用蓝牙API,Android应用程序能够执行以下功能:
1.扫描其他蓝牙设备
2.查询本地已经配对的蓝牙适配器
3.建立RFCOMM通道
4.通过服务发现来连接其他设备
5.在设备间传输数据
6.管理多个蓝牙连接
基础
本文介绍如何使用Android的蓝牙API来完成使用蓝牙通信所需要的四项主要任务:
设置蓝牙、查找已配对或区域内可用的蓝牙设备、连接设备、设备间传输数据。
所有的可用的API都在android.bluetooth包中。
以下概要的介绍创建蓝牙连接所需要的类和接口:
BluetoothAdapter
代表本地蓝牙适配器(蓝牙无线)。
BluetoothAdapter是所有蓝牙交互的入口。
使用这个类,你能够发现其他的蓝牙设备,查询已配对设备的列表,使用已知的MAC地址来实例化一个BluetoothDevice对象,并且创建一个BluetoothServerSocket对象来监听与其他设备的通信。
BluetoothDevice
代表一个远程的蓝牙设备。
使用这个类通过BluetoothSocket或查询诸如名称、地址、类和配对状态等设备信息来请求跟远程设备的连接。
BluetoothSocket
代表蓝牙socket的接口(类似TCP的Socket)。
这是允许一个应用程序跟另一个蓝牙设备通过输入流和输出流进行数据交换的连接点。
BluetoothServerSocket
代表一个打开的监听传入请求的服务接口(类似于TCP的ServerSocket)。
为了连接两个Android设备,一个设备必须用这个类打开一个服务接口。
当远程蓝牙设备请求跟本设备建立连接请求时,BluetoothServerSocket会在连接被接收时返回一个被连接的BluetoothSocket对象。
BluetoothClass
描述了蓝牙设备的一般性特征和功能。
这个类是一个只读的属性集,这些属性定义了设备的主要和次要设备类和服务。
但是,这个类并不保证描述了设备所支持的所有的蓝牙配置和服务,但是这种对设备类型的提示是有益的。
BluetoothProfile
代表一个蓝牙配置的接口。
蓝牙配置是基于蓝牙通信的设备间的无线接口规范。
一个例子是免提的配置。
更多的配置讨论,请看下文的用配置来工作。
BluetoothHeadset
提供对使用蓝牙耳机的移动电话的支持。
它同时包含了BluetoothHeadset和Hands-Free(v1.5)的配置。
BluetoothA2dp
定义如何把高品质的音频通过蓝牙连接从一个设备流向另一个设备。
“A2DP”是AdvancedAudioDistributionProfile的缩写。
BluetoothHealth
代表一个健康保健设备配置的控制蓝牙服务的代理。
BluetoothHealthCallback
用于实现BluetoothHealth回调的抽象类。
你必须继承这个类,并实现它的回调方法,来接收应用程序的注册状态和蓝牙通道状态变化的更新。
BluetoothHealthAppConfiguration
代表蓝牙相关的第三方健康保健应用程序所注册的与远程蓝牙健康保健设备进行通信的配置。
BluetoothProfile.ServiceListener
BluetoothProfileIPC客户端连接或断开服务的通知接口(它是运行特俗配置的内部服务)。
Android的联通性---Bluetooth
(二)
蓝牙权限
为了在你的应用程序中使用蓝牙功能,至少要声明两个蓝牙权限(BLUETOOTH和BLUETOOTH_ADMIN)中的一个。
为了执行任何蓝牙通信(如请求连接、接收连接和传输数据),你必须申请BLUETOOTH权限。
为了启动设备发现或维护蓝牙设置,你必须申请BLUETOOTH_ADMIN权限。
大多数需要这个权限的应用程序,仅仅是为能够发现本地的蓝牙设备。
这个权限所授予的其他能力应该不被使用,除非是电源管理的应用程序,它会在依据用户的请求来修改蓝牙设置。
注意:
如果你使用了BLUETOOTH_ADMIN权限,那么必须要有BLUETOOTH权限。
在你的应用程序清单文件中声明蓝牙权限,例如:
name="android.permission.BLUETOOTH"/> ... 关于声明应用程序权限的更多信息,请参阅 设置蓝牙 在应用程序能够利用蓝牙通道通信之前,需要确认设备是否支持蓝牙通信,如果支持,要确保它是可用的。 如果不支持蓝牙,那么你应该有好的禁用所有蓝牙功能。 如果支持蓝牙,但是被禁用的,那么你要在不离开你的应用程序的情况下,请求用户启用蓝牙功能,这种设置要使用BluetoothAdapter对象,在以下两个步骤中完成。 1.获得BluetoothAdapter对象 BluetoothAdapter对象是所有蓝牙活动都需要的,要获得这个对象,就要调用静态的getDefaultAdapter()方法。 这个方法会返回一个代表设备自己的蓝牙适配器的BluetoothAdapter对象。 整个系统有一个蓝牙适配器,你的应用程序能够使用这个对象来进行交互。 如果getDefaultAdapter()方法返回null,那么该设备不支持蓝牙,你的处理也要在此结束。 例如: BluetoothAdaptermBluetoothAdapter=BluetoothAdapter.getDefaultAdapter(); if(mBluetoothAdapter==null){ //DevicedoesnotsupportBluetooth } 2.启用蓝牙功能 接下来,你需要确保蓝牙是可用的。 调用isEnabled()方法来检查当前蓝牙是否可用。 如果这个方法返回false,那么蓝牙是被禁用的。 要申请启用蓝牙功能,就要调用带有ACTION_REQUEST_ENABLE操作意图的startActivityForResult()方法。 它会给系统设置发一个启用蓝牙功能的请求(不终止你的应用程序)。 例如: if(! mBluetoothAdapter.isEnabled()){ IntentenableBtIntent=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent,REQUEST_ENABLE_BT); } 这时会显示一个请求用户启用蓝牙功能的对话框,如图1所示: 图1.启用蓝牙功能的对话框。 如果用户响应“Yes”,那么系统会开始启用蓝牙功能,完成启动过程(有可能失败),焦点会返回给你的应用程序。 传递给startActivityForResult()方法的REQUEST_ENABLE_BT常量,是一个你的应用程序中定义的整数(它必须大于0),系统会把它作为requestCode参数返回到你的onActivityResult()回调实现中。 如果蓝牙功能启用成功,你的Activity会在onActivityResult()回调中接收到RESULT_OK结果,如果蓝牙没有被启动(或者用户响应了“No”),那么该结果编码是RESULT_CANCELED。 可选地,你的应用程序还可以监听ACTION_STATE_CHANGED广播Intent,无论蓝牙状态何时改变,系统都会广播这个Intent。 这个广播包含的附加字段EXTRA_STATE和EXTRA_PREVIOUS_STATE中分别指明了新的和旧的蓝牙状态。 这些附加字段中可能的值是: STATE_TURNING_ON、STATE_ON、STATE_TURNING_OFF和STATE_OFF。 监听这个广播对于在应用程序运行时检测蓝牙的状态是有用的。 提示: 启用可发现能力会自动启动蓝牙功能。 如果你计划在执行蓝牙活动之前,要始终启用设备的可发现机制,就可以跳过上面的第2步,详细请参阅下文“启用蓝牙可发现”。 Android的联通性---Bluetooth(三) 查找设备 使用BluetoothAdapter对象,能够通过设备发现或查询已配对的设备列表来找到远程的蓝牙设备。 设备发现是一个扫描过程,该过程搜索本地区域内可用的蓝牙设备,然后请求一些彼此相关的一些信息(这个过程被叫做“发现”、“查询”或“扫描”)。 但是,本地区域内的蓝牙设备只有在它们也启用了可发现功能时,才会响应发现请求。 如果一个设备是可发现的,那么它会通过共享某些信息(如设备名称、类别和唯一的MAC地址)来响应发现请求。 使用这些信息,执行发现处理的设备能够有选择的初始化跟被发现设备的连接。 一旦跟远程的设备建立的首次连接,配对请求就会自动的被展现给用户。 当设备完成配对,相关设备的基本信息(如设备名称、类别和MAC地址)就会被保存,并能够使用蓝牙API来读取。 使用已知的远程设备的MAC地址,在任何时候都能够初始化一个连接,而不需要执行发现处理(假设设备在可连接的范围内)。 要记住配对和连接之间的差异。 配对意味着两个设备对彼此存在性的感知,它们之间有一个共享的用于验证的连接密钥,用这个密钥两个设备之间建立被加密的连接。 连接意味着当前设备间共享一个RFCOMM通道,并且能够被用于设备间的数据传输。 当前Android蓝牙API在RFCOMM连接被建立之前,要求设备之间配对。 (在使用蓝牙API初始化加密连接时,配对是自动被执行的。 ) 以下章节介绍如何发现已配对的设备,或发现新的使用了可发现功能的设备。 注意: 默认Android设备是不可发现的。 用户能够通过系统设置在限定的时间内变成可发现的设备,或者应用程序能够请求用户启用可发现性,而不离开应用程序。 如何启用可发现性,会在下文来讨论。 查询配对设备 在执行设备发现之前,应该先查询已配对的设备集合,来看期望的设备是否是已知的。 调用getBondedDevices()方法来完成这件工作。 这个方法会返回一个代表已配对设备的BluetoothDevice对象的集合。 例如,你能够查询所有的配对设备,然后使用一个ArrayAdapter对象把每个已配对设备的名称显示给用户。 Set //Iftherearepaireddevices if(pairedDevices.size()>0){ //Loopthroughpaireddevices for(BluetoothDevicedevice: pairedDevices){ //AddthenameandaddresstoanarrayadaptertoshowinaListView mArrayAdapter.add(device.getName()+"\n"+device.getAddress()); } } 从BluetoothDevice对象来初始化一个连接所需要的所有信息就是MAC地址。 在这个例子中,MAC地址被作为ArrayAdapter的一部分来保存,并显示给用户。 随后,该MAC地址能够被提取用于初始化连接
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 蓝牙 开发