鴻蒙OS BLE掃描和廣播

2020-09-18 15:06 更新

場(chǎng)景介紹

通過(guò) BLE 掃描和廣播提供的開(kāi)放能力,可以根據(jù)指定狀態(tài)獲取外圍設(shè)備、啟動(dòng)或停止 BLE 掃描、廣播。

接口說(shuō)明

接口名 功能描述
startScan(List<BleScanFilter> filters) 進(jìn)行 BLE 藍(lán)牙掃描,并使用 filters 對(duì)結(jié)果進(jìn)行過(guò)濾。
stopScan() 停止 BLE 藍(lán)牙掃描。
getDevicesByStates(int[] states) 根據(jù)狀態(tài)獲取連接的外圍設(shè)備。
BleCentralManager(BleCentralManagerCallback callback) 獲取中心設(shè)備管理對(duì)象。
接口名 功能描述
onScanCallback(BleScanResult result) 掃描到 BLE 設(shè)備的結(jié)果回調(diào)。
onStartScanFailed(int resultCode) 啟動(dòng)掃描失敗的回調(diào)。
接口名 功能描述
BleAdvertiser(Context context, BleAdvertiseCallback callback) 用于獲取廣播操作對(duì)象。
startAdvertising(BleAdvertiseSettings settings, BleAdvertiseData advData, BleAdvertiseData scanResponse) 進(jìn)行 BLE 廣播,第一個(gè)參數(shù)為廣播參數(shù),第二個(gè)為廣播數(shù)據(jù),第三個(gè)參數(shù)是掃描和廣播數(shù)據(jù)參數(shù)的響應(yīng)。
stopAdvertising() 停止 BLE 廣播。
startResultEvent(int result) 廣播回調(diào)結(jié)果。

中心設(shè)備進(jìn)行 BLE 掃描

  1. 進(jìn)行 BLE 掃描之前先要繼承 BleCentralManagerCallback 類實(shí)現(xiàn) onScanCallback 和 onStartScanFailed 回調(diào)函數(shù),用于接收掃描結(jié)果。

  1. 調(diào)用BleCentralManager(BleCentralManagerCallback callback)接口獲取中設(shè)備管理對(duì)象。

  1. 獲取掃描過(guò)濾器,過(guò)濾器為空時(shí)為不使用過(guò)濾器掃描,然后調(diào)用 startScan()開(kāi)始掃描 BLE 設(shè)備,在回調(diào)中獲取掃描到的 BLE 設(shè)備。

  1. // 實(shí)現(xiàn)掃描回調(diào)
  2. public class ScanCallback implements BleCentralManagerCallback{
  3. List<BleScanResult>results = new ArrayList<BleScanResult>();
  4. @Override
  5. public void onScanCallback(BleScanResult var1) {
  6. // 對(duì)掃描結(jié)果進(jìn)行處理
  7. results.add(var1);
  8. }
  9. @Override
  10. public void onStartScanFailed(int var1) {
  11. HiLog.info(TAG,"Start Scan failed,Code:" + var1);
  12. }
  13. }
  14. // 獲取中心設(shè)備管理對(duì)象
  15. private ScanCallback centralManagerCallback = new ScanCallback();
  16. private BleCentralManager centralManager = new BleCentralManager(centralManagerCallback);
  17. // 創(chuàng)建掃描過(guò)濾器然后開(kāi)始掃描
  18. List<BleScanFilter> filters = new ArrayList<BleScanFilter>();
  19. centralManager.startScan(filters);

外圍設(shè)備進(jìn)行 BLE 廣播

  1. 進(jìn)行 BLE 廣播前需要先繼承 advertiseCallback 類實(shí)現(xiàn) startResultEvent 回調(diào),用于獲取廣播結(jié)果。

  1. 調(diào)用接口 BleAdvertiser(Context context, BleAdvertiseCallback callback)獲取廣播對(duì)象,構(gòu)造廣播參數(shù)和廣播數(shù)據(jù)。

  1. 調(diào)用 startAdvertising(BleAdvertiseSettings settings, BleAdvertiseData advData, BleAdvertiseData scanResponse) 接口開(kāi)始 BLE 廣播。

  1. // 實(shí)現(xiàn) BLE 廣播回調(diào)
  2. private BleAdvertiseCallback advertiseCallback = new BleAdvertiseCallback() {
  3. @Override
  4. public void startResultEvent(int result) {
  5. if(result == BleAdvertiseCallback.RESULT_SUCC){
  6. // 開(kāi)始 BLE 廣播成功
  7. }
  8. else {
  9. // 開(kāi)始 BLE 廣播失敗
  10. }
  11. }
  12. };
  13. // 獲取 BLE 廣播對(duì)象
  14. private BleAdvertiser advertiser = new BleAdvertiser(this,advertiseCallback);
  15. // 創(chuàng)建 BLE 廣播參數(shù)和數(shù)據(jù)
  16. private BleAdvertiseData data = new BleAdvertiseData.Builder()
  17. .addServiceUuid(SequenceUuid.uuidFromString(Server_UUID)) // 添加服務(wù)的 UUID
  18. .addServiceData(SequenceUuid.uuidFromString(Server_UUID),new byte[]{0x11}) // 添加廣播數(shù)據(jù)內(nèi)容
  19. .build();
  20. private BleAdvertiseSettings advertiseSettings = new BleAdvertiseSettings.Builder()
  21. .setConnectable(true) // 設(shè)置是否可連接廣播
  22. .setInterval(BleAdvertiseSettings.INTERVAL_SLOT_DEFAULT) // 設(shè)置廣播間隔
  23. .setTxPower(BleAdvertiseSettings.TX_POWER_DEFAULT) // 設(shè)置廣播功率
  24. .build();
  25. // 開(kāi)始廣播
  26. advertiser.startAdvertising(advertiseSettings,data,null);
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)