赞
踩
通过BLE扫描和广播提供的开放能力,可以根据指定状态获取外围设备、启动或停止BLE扫描、广播。
接口名 | 功能描述 |
---|---|
startScan(List<BleScanFilter> filters) | 进行BLE蓝牙扫描,并使用filters对结果进行过滤。 |
stopScan() | 停止BLE蓝牙扫描。 |
getDevicesByStates(int[] states) | 根据状态获取连接的外围设备。 |
BleCentralManager(Context context, BleCentralManagerCallback callback) | 获取中心设备管理对象。 |
接口名 | 功能描述 |
---|---|
scanResultEvent(BleScanResult result) | 扫描到BLE设备的结果回调。 |
groupScanResultsEvent(List<BleScanResult> scanResults) | 扫描到一组BLE设备的结果回调。 |
scanFailedEvent(int resultCode) | 启动扫描失败的回调。 |
接口名 | 功能描述 |
---|---|
BleAdvertiser(Context context, BleAdvertiseCallback callback) | 用于获取广播操作对象。 |
startAdvertising(BleAdvertiseSettings settings, BleAdvertiseData advData, BleAdvertiseData scanResponse) | 进行BLE广播,第一个参数为广播参数,第二个为广播数据,第三个参数是扫描和广播数据参数的响应。 |
stopAdvertising() | 停止BLE广播。 |
startResultEvent(int result) | 广播回调结果。 |
- // 实现扫描回调
- public class ScanCallback implements BleCentralManagerCallback{
- List<BleScanResult> results = new ArrayList<BleScanResult>();
- @Override
- public void scanResultEvent(BleScanResult resultCode) {
- // 对扫描结果进行处理
- results.add(resultCode);
- }
- @Override
- public void scanFailedEvent(int resultCode) {
- HiLog.warn(TAG,"Start Scan failed, Code: %{public}d", resultCode);
- }
- @Override
- public void groupScanResultsEvent(final List<BleScanResult> scanResults){
- // 对扫描结果进行处理
- }
- }
- // 获取中心设备管理对象
- private ScanCallback centralManagerCallback = new ScanCallback();
- private BleCentralManager centralManager = new BleCentralManager(context, centralManagerCallback);
- // 创建扫描过滤器然后开始扫描
- List<BleScanFilter> filters = new ArrayList<BleScanFilter>();
- centralManager.startScan(filters);

- // 实现BLE广播回调
- private BleAdvertiseCallback advertiseCallback = new BleAdvertiseCallback() {
- @Override
- public void startResultEvent(int result) {
- if(result == BleAdvertiseCallback.RESULT_SUCC){
- // 开始BLE广播成功
- }else {
- // 开始BLE广播失败
- }
- }
- };
- // 获取BLE广播对象
- private BleAdvertiser advertiser = new BleAdvertiser(this,advertiseCallback);
- // 创建BLE广播参数和数据
- private BleAdvertiseData data = new BleAdvertiseData.Builder()
- .addServiceUuid(SequenceUuid.uuidFromString(Server_UUID)) // 添加服务的UUID
- .addServiceData(SequenceUuid.uuidFromString(Server_UUID), new byte[]{0x11}) // 添加广播数据内容
- .build();
- private BleAdvertiseSettings advertiseSettings = new BleAdvertiseSettings.Builder()
- .setConnectable(true) // 设置是否可连接广播
- .setInterval(BleAdvertiseSettings.INTERVAL_SLOT_DEFAULT) // 设置广播间隔
- .setTxPower(BleAdvertiseSettings.TX_POWER_DEFAULT) // 设置广播功率
- .build();
- // 开始广播
- advertiser.startAdvertising(advertiseSettings, data, null);

BLE外围设备和中心设备建立GATT连接,通过该连接中心设备可以获取外围设备支持的Service、Characteristic、Descriptor、RSSI等数据。同时,中心设备可以向外围设备进行数据请求,并向外围设备写入Characteristic、Descriptor等特征值数据。
低功耗蓝牙外围设备操作类BlePeripheralDevice的接口说明如下。
接口名 | 功能描述 |
---|---|
connect(boolean isAutoConnect, BlePeripheralCallback callback) | 重新连接GATT外围设备,isAutoConnect表示是否自动进行连接。 |
discoverServices() | 搜索外围设备支持的服务,特征和描述。 |
getServices() | 获取外围设备支持的所有GATT服务。 |
getService(UUID uuid) | 根据UUID获取外围设备支持的某个GATT服务。 |
disconnect() | 与外围设备断开BLE连接。 |
close() | 关闭蓝牙GATT客户端。 |
readCharacteristic(GattCharacteristic characteristic) | 读取外围设备GATT特征。 |
writeCharacteristic(GattCharacteristic characteristic) | 写指定外围设备的GATT特征值。 |
setNotifyCharacteristic(GattCharacteristic characteristic, boolean enable) | 设置指定GATT特征通知的使能/去使能。 |
readDescriptor (GattDescriptor descriptor) | 读取外围设备GATT描述值。 |
writeDescriptor(GattDescriptor descriptor) | 写指定外围设备的GATT描述值。 |
readRemoteRssiValue() | 读取已连接外围设备的RSSI。 |
requestBleConnectionPriority(int connPriority) | 请求链接参数更新。 |
requestBleMtuSize(int mtu) | 请求用于给定连接的MTU大小。 |
低功耗蓝牙外围设备操作回调类BlePeripheralCallback的接口说明如下。
接口名 | 功能描述 |
---|---|
servicesDiscoveredEvent(int status) | 外围设备服务发生更新触发的回调。 |
connectionStateChangeEvent(int connectionState) | 外围设备GATT连接状态发生变化时的回调。 |
characteristicReadEvent(GattCharacteristic characteristic, int ret) | GATT特征值读操作回调。 |
characteristicWriteEvent(GattCharacteristic characteristic, int ret) | GATT特征值写操作回调。 |
characteristicChangedEvent(GattCharacteristic characteristic) | 外围设备特征通知触发的回调。 |
descriptorReadEvent(GattDescriptor descriptor, int ret) | GATT描述值读操作回调。 |
descriptorWriteEvent(GattDescriptor descriptor, int ret) | GATT描述值写操作回调。 |
readRemoteRssiEvent(int rssi, int ret) | 外围设备发来读取RSSI的回调。 |
mtuUpdateEvent(int mtu, int ret) | GATT设备链接的MTU变化通知的回调。 |
- private List<GattService> services;
- // 创建扫描过滤器然后开始扫描
- List<BleScanFilter> filters = new ArrayList<BleScanFilter>();
- centralManager.startScan(filters);
- // 与外围设备建立连接,允许自动回连,连接会触发connectionStateChangeEvent回调
- private BlePeripheralDevice peripheralDevice = BlePeripheralDevice.createInstance(address); // address为远端设备地址
- MyBlePeripheralCallback callback = new MyBlePeripheralCallback();
- peripheralDevice.connect(true, callback);
- // 连接后读取外围设备RSSI值,获取后触发readRemoteRssiEvent()回调
- peripheralDevice.readRemoteRssiValue();
-
- // 实现外围设备操作回调
- private class MyBlePeripheralCallback extends BlePeripheralCallback {
- @Override
- public void connectionStateChangeEvent(int connectionState) { // GATT连接状态变化回调
- if (connectionState == ProfileBase.STATE_CONNECTED){
- peripheralDevice.discoverServices(); // 连接成功获取外围设备的Service
- }
- }
-
- @Override
- public void servicesDiscoveredEvent(int status) { // 获取外围设备Service的回调
- if (status == BlePeripheralDevice.OPERATION_SUCC){
- services = peripheralDevice.getServices(); // 获取Service成功后获服务列表
- for (GattService service : services){
- // 对每个服务进行相应操作
- }
- }
- }
-
- @Override
- public void characteristicChangedEvent(GattCharacteristic charecteristic) { // 外围设备主动向中心设备发送特征值通知时触发回调
- // 根据通知的charecteristic获取特征值携带的数据
- }
-
- @Override
- public void characteristicWriteEvent(GattCharacteristic charecteristic, int ret) {
- if (ret == BlePeripheralDevice.OPERATION_SUCC){
- // 向外围设备写特征值数据成功后的操作
- }
- }
-
- @Override
- public void characteristicReadEvent(GattCharacteristic charecteristic, int ret) {
- if (ret == BlePeripheralDevice.OPERATION_SUCC){
- // 向外围设备读特征值数据成功后的操作
- }
- }
-
- @Override
- public void descriptorReadEvent(GattDescriptor descriptor, int ret) {
- // 向外围设备读描述值数据成功后的操作
- }
-
- @Override
- public void descriptorWriteEvent(GattDescriptor descriptor, int ret) {
- // 向外围设备写描述值数据成功后的操作
- }
-
- @Override
- public void readRemoteRssiEvent(int rssi, int ret) {
- if (ret == BlePeripheralDevice.OPERATION_SUCC){
- // 读取外围设备RSSI值成功后的操作,对端RSSI值为rssi
- }
- }
- }

BLE外围设备作为服务端,可以接收来自中心设备(客户端)的GATT连接请求,应答来自中心设备的特征值内容读取和写入请求,并向中心设备提供数据,从而实现信息交互和消息同步。同时外围设备还可以主动向中心设备发送数据。
低功耗蓝牙外围设备操作类BlePeripheralManager的接口说明如下。
接口名 | 功能描述 |
---|---|
BlePeripheralManager(Context context, BlePeripheralManagerCallback callback, int transport) | 获取外围设备管理回调对象。 |
getServices() | 获取外围设备的所有服务。 |
addService(GattService service) | 将GATT服务加入服务端。 |
cancelConnection(BlePeripheralDevice device) | 取消与中心设备的GATT连接。 |
clearServices() | 删除所有的GATT服务。 |
close() | 关闭GATT服务端。 |
getDevicesByStates(int[] states) | 通过状态获取连接的中心设备列表。 |
notifyCharacteristicChanged(BlePeripheralDevice device, GattCharacteristic characteristic, boolean confirm) | 通知中心设备特征值出现变化。 |
removeGattService(GattService service) | 移除特定的服务。 |
sendResponse(BlePeripheralDevice device, int requestId, int status, int offset, byte[] value) | 发送回复给中心设备。 |
低功耗蓝牙外围设备管理回调类BlePeripheralManagerCallback的接口说明如下。
接口名 | 功能描述 |
---|---|
receiveCharacteristicReadEvent(BlePeripheralDevice device, int requestId, int offset, GattCharacteristic characteristic) | 收到中心设备对特征值的读取请求回调。 |
receiveCharacteristicWriteEvent(BlePeripheralDevice device, int requestId, GattCharacteristic characteristic, boolean isPrep, boolean needRsp, int offset, byte[] value) | 收到中心设备对特征值的写入请求。 |
connectionStateChangeEvent(BlePeripheralDevice device, int interval, int latency, int timeout, int status) | 中心设备连接事件回调。 |
receiveDescriptorReadEvent(BlePeripheralDevice device, int transId, int offset, GattDescriptor descriptor) | 收到中心设备对描述值的读取请求回调。 |
receiveDescriptorWriteRequestEvent(BlePeripheralDevice device, int transId, GattDescriptor descriptor, boolean isPrep, boolean needRsp, int offset, byte[] value) | 收到中心设备对描述值的写入请求回调。 |
executeWriteEvent(BlePeripheralDevice device, int requestId, boolean execute) | 向中心设备执行写入操作的回调。 |
mtuUpdateEvent(BlePeripheralDevice device, int mtu) | 中心设备MTU值变化的回调。 |
notificationSentEvent(BlePeripheralDevice device, int status) | 向中心设备发送通知的回调。 |
serviceAddedEvent(int status, GattService service) | 向外围设备添加服务结果回调。 |
- private BlePeripheralDevice blePeripheralDevice;
- private MyBlePeripheralManagerCallback peripheralManagerCallback = new MyBlePeripheralManagerCallback();
- // 创建外围设备服务端并开启服务
- private BlePeripheralManager peripheralManager = new BlePeripheralManager(this, peripheralManagerCallback, 0);
- // 创建服务对象,向外围设备添加服务
- private GattService service = new GattService(UUID.fromString(Service_UUID), true);
- private GattCharacteristic writeCharacteristic = new GattCharacteristic(Character_UUID,
- GattCharacteristic.PROPERTY_WRITE, GattCharacteristic.PROPERTY_WRITE);
- service.addCharacteristic(writeCharacteristic);
- peripheralManager.addServerService(service);
- // 向中心设备发送通知
- writeCharacteristic.setValue(data);
- peripheralManager.notifyCharacteristicChanged(blePeripheralDevice, writeCharacteristic, false);
-
- // 外围设备管理回调
- public class MyBlePeripheralManagerCallback extends BlePeripheralManagerCallback {
- // 中心设备向外围设备写入数据回调
- @Override
- public void receiveCharacteristicWriteEvent(BlePeripheralDevice device, int requestId,
- GattCharacteristic characteristic, boolean isPrep, boolean needRsp, int offset, byte[] value){
- // 中心设备写入外围设备的数据为value,对数据进行处理
- }
- // 外围设备连接状态变化回调
- @Override
- public void connectionStateChangeEvent(BlePeripheralDevice device, int interval, int latency, int timeout, int status){
- if (status == ProfileBase.STATE_CONNECTED) {
- // 中心设备连接服务端成功
- blePeripheralDevice = device;
- }
- }
- // 向中心设备发送通知回调
- @Override
- public void notificationSentEvent(BlePeripheralDevice device, int status){
- if (status == BlePeripheralDevice.OPERATION_SUCC) {
- // 向对中心设备发送通知成功回调
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。