HarmonyOS-鸿蒙app开发 —基于java网络与连接_BLE扫描和广播

HarmonyOS-鸿蒙app开发 —基于java网络与连接_BLE扫描和广播

场景介绍

通过BLE扫描和广播提供的开放能力,可以根据指定状态获取外围设备、启动或停止BLE扫描、广播。

接口说明

表1 BLE中心设备管理类BleCentralManager的主要接口

接口名

功能描述

startScan(List<BleScanFilter> filters)

进行BLE蓝牙扫描,并使用filters对结果进行过滤。

stopScan()

停止BLE蓝牙扫描。

getDevicesByStates(int[] states)

根据状态获取连接的外围设备。

BleCentralManager(Context context, BleCentralManagerCallback callback)

获取中心设备管理对象。

表2 中心设备管理回调类BleCentralManagerCallback的主要接口

接口名

功能描述

scanResultEvent​(BleScanResult result)

扫描到BLE设备的结果回调。

groupScanResultsEvent​(List<BleScanResult> scanResults)

扫描到一组BLE设备的结果回调。

scanFailedEvent​(int resultCode)

启动扫描失败的回调。

表3 BLE广播相关的BleAdvertiser类和BleAdvertiseCallback类的主要接口

接口名

功能描述

BleAdvertiser(Context context, BleAdvertiseCallback callback)

用于获取广播操作对象。

startAdvertising(BleAdvertiseSettings settings, BleAdvertiseData advData, BleAdvertiseData scanResponse)

进行BLE广播,第一个参数为广播参数,第二个为广播数据,第三个参数是扫描和广播数据参数的响应。

stopAdvertising()

停止BLE广播。

startResultEvent(int result)

广播回调结果。

中心设备进行BLE扫描

  1. 进行BLE扫描之前先要继承BleCentralManagerCallback类实现scanResultEvent和scanFailedEvent回调函数,用于接收扫描结果。
  2. 调用BleCentralManager(BleCentralManagerCallback callback)接口获取中心设备管理对象。

获取扫描过滤器,过滤器为空时为不使用过滤器扫描,然后调用startScan()开始扫描BLE设备,在回调中获取扫描到的BLE设备。

// 实现扫描回调

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广播

  1. 进行BLE广播前需要先继承advertiseCallback类实现startResultEvent回调,用于获取广播结果。
  2. 调用接口BleAdvertiser(Context context, BleAdvertiseCallback callback)获取广播对象,构造广播参数和广播数据。

调用startAdvertising(BleAdvertiseSettings settings, BleAdvertiseData advData, BleAdvertiseData scanResponse)接口开始BLE广播。

// 实现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);

🚀 如未找到文章请搜索栏搜素 | Ctrl+D收藏本站 | 联系邮箱:15810050733@qq.com