鴻蒙OS BLE掃描和廣播

2020-09-18 15:06 更新

場景介紹

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

接口說明

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

  1. 獲取掃描過濾器,過濾器為空時為不使用過濾器掃描,然后調(diào)用 startScan()開始掃描 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) {
           // 對掃描結(jié)果進(jìn)行處理
           results.add(var1);
       }
       @Override    
       public void onStartScanFailed(int var1) {        
           HiLog.info(TAG,"Start Scan failed,Code:" + var1);    
       }
   }
   // 獲取中心設(shè)備管理對象
   private ScanCallback centralManagerCallback = new ScanCallback();
   private BleCentralManager centralManager = new BleCentralManager(centralManagerCallback);
   // 創(chuàng)建掃描過濾器然后開始掃描
   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)獲取廣播對象,構(gòu)造廣播參數(shù)和廣播數(shù)據(jù)。

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

   // 實(shí)現(xiàn) BLE 廣播回調(diào)
   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);
   // 創(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();
   // 開始廣播
   advertiser.startAdvertising(advertiseSettings,data,null);
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號