鴻蒙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è)備。

   // 實(shí)現(xiàn)掃描回調(diào)
   public class ScanCallback implements BleCentralManagerCallback{
       List<BleScanResult>results = new ArrayList<BleScanResult>();
       @Override
       public void onScanCallback(BleScanResult var1) {
           // 對(duì)掃描結(jié)果進(jìn)行處理
           results.add(var1);
       }
       @Override    
       public void onStartScanFailed(int var1) {        
           HiLog.info(TAG,"Start Scan failed,Code:" + var1);    
       }
   }
   // 獲取中心設(shè)備管理對(duì)象
   private ScanCallback centralManagerCallback = new ScanCallback();
   private BleCentralManager centralManager = new BleCentralManager(centralManagerCallback);
   // 創(chuàng)建掃描過(guò)濾器然后開(kāi)始掃描
   List<BleScanFilter> filters = new ArrayList<BleScanFilter>();
   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 廣播。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)