低功耗蓝牙的基本概念:
在BLE协议中,有两个角色,周边(Periphery)和中央(Central)。周边是数据的提供者,中央是数据的使用和处理者。在Android SDK里面,Android4.3以后手机可以作为中央使用;Android5.0以后手机才可以作为周边使用,即此时的手机可以作为BLE设备(如可穿戴设备、手环、智能锁、心率测量仪等)来为中央提供数据。
一个中央可以同时连接多个周边,但一个周边某一时刻只能连接一个中央。
Android BLE SDK的四个关键类如下:
1、BluetoothGattServer作为周边来提供数据,BluetoothGattServerCallback返回周边的状态,更通俗的说,当中央有请求时,系统调用该抽象类的相应方法传递数据给周边。
2、BluetoothGatt作为中央来使用和处理数据,BluetoohGattCallback返回中央的状态和周边提供数据,即周边反馈的数据通过该抽象类的相应方法传递到中央。
该篇文章主要总结手机作为周边的实现
一、创建一个周边所需的类,如下图
说明:每个周边BluetoothGattServer包含多个服务,每个服务包含多个特征,每个特征又可以包含多个描述
1、new一个描述:descriptor=new BluetoothGattDescriptor(UUID_DESCRIPTOR,
BluetoothGattCharacteristic.PERMISSION_WRITE);
2、new 一个特征:characteristicRead=new BluetoothGattCharacteristic(
UUID_CHARREAD,
BluetoothGattCharacteristic.PROPERTY_READ,
3、把描述添加到特征:characteristicRead.addDescriptor(descriptor);
4、new 一个服务: service=new BluetoothGattService(UUID_SERVER,
BluetoothGattService.SERVICE_TYPE_PRIMARY);
5、把特征添加到服务:service.addCharacteristic(characteristicWrite);
6、获取BluetoothManager:mBluetoothManager=(BluetoothManager)
getSystemService(Context.BLUETOOTH_SERVICE);
7、获取周边:mBluetoothGattServer=mBluetoothManager.openGattServer(
context,bluetoothGattServerCallback);
8、把服务添加到周边: mBluetoothGattServer.addService(service);
9、将添加的服务广播出去,在本人实现的案例中,将initServices()在广播的回调方法中调用。
二、实现的程序讲解
手机作为外设:设置广播与服务主要涉及的类BluetoothLeAdvertiser与Bluetooth