Android 蓝牙
关于Android下BLE(Bluetooth Low Energy)开发的一些积累
1.创建BLE基本步骤
1.1获取BluethoothAdapter
所有的蓝牙活动都需要蓝牙适配器。BluetoothAdapter代表设备本身的蓝牙适配器(蓝牙无线)。整个系统只有一个蓝牙适配器,而且你的app使用它与系统交互。下面的代码片段显示了如何得到适配器。注意该方法使用getSystemService()返回BluetoothManager,然后将其用于获取适配器的一个实例。Android 4.3(API 18)引入BluetoothManager。
|
|
1.2 开启蓝牙
接下来,你需要确认蓝牙是否开启。调用isEnabled())去检测蓝牙当前是否开启。如果该方法返回false,蓝牙被禁用。下面的代码检查蓝牙是否开启,如果没有开启,将显示错误提示用户去设置开启蓝牙。
|
|
1.3 发现设备
为了发现BLE设备,使用startLeScan()方法。这个方法需要一个参数BluetoothAdapter.LeScanCallback。你必须实现它的回调函数,那就是返回的扫描结果。因为扫描非常消耗电量,你应当遵守以下准则:
只要找到所需的设备,停止扫描。
不要在循环里扫描,并且对扫描设置时间限制。以前可用的设备可能已经移出范围,继续扫描消耗电池电量。
下面代码显示了如何开始和停止一个扫描:
JellyBean —API18及以上:直接用BlueAdapter.startLeScan(), 这里有个坑,传入的阐述UUID… serviceUUIDs传入这个参数搜索的BLEDevice都要满足这些UUIDS才能被搜到,这些UUID不是或关系,而是与关系。
Lollipop —API21及以上:用BluetoothAdapter获取到:BluetoothAdapter.getBluetoothLeScanner(),获取到一个BluetoothLeScanner对象,在用这个调用
startScan(List<ScanFilter> filter , ScanSetting setting, ScanCallback scancallbacn)
来查找设备。这里的fileter就是或关系了。可以把UUID转成ScanFilter。
1.4 连接到GATT服务端
与一个BLE设备交互的第一步就是连接它——更具体的,连接到BLE设备上的GATT服务端。为了连接到BLE设备上的GATT服务端,需要使用connectGatt( )方法。这个方法需要三个参数:一个Context对象,自动连接(boolean值,表示只要BLE设备可用是否自动连接到它),和BluetoothGattCallback调用。
mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
连接到GATT服务端时,由BLE设备做主机,并返回一个BluetoothGatt实例,然后你可以使用这个实例来进行GATT客户端操作。请求方(Android app)是GATT客户端。BluetoothGattCallback用于传递结果给用户,例如连接状态,以及任何进一步GATT客户端操作。
1.5 读取BLE变量
你的android app完成与GATT服务端连接和发现services后,就可以读写支持的属性。例如,这段代码通过服务端的services和 characteristics迭代,并且将它们显示在UI上。
|
|
1.6开启通知
当设备上的特性改变时会通知BLE应用程序。这段代码显示了如何使用setCharacteristicNotification( )给一个特性设置通知。
|
|
1.7关闭App客户端
当你的app完成BLE设备的使用后,应该调用close( )),系统可以合理释放占用资源。
|
|