天天看點

iOS 藍牙裝置名稱緩存問題總結

1. 問題背景

  • 當裝置已經在 App 中連接配接成功後
  • 修改裝置名稱
  • App 掃描到的裝置名稱仍然是之前的名稱
  • App 代碼中擷取名稱的方式為(perpheral.name)

2. 問題分析

當 APP 為中心連接配接其他的藍牙裝置時。

首次連接配接成功過後,iOS系統内會将該外設緩存記錄下來。

下次重新搜尋時,搜尋到的藍牙裝置時,直接列印 (peripheral.name),得到的是之前緩存中的藍牙名稱。

如果此期間藍牙裝置更新了名稱,(peripheral.name)這個參數并不會改變,是以需要換一種方式擷取裝置的名稱,在廣播資料包内有一個字段為 kCBAdvDataLocalName,可以實時擷取目前裝置名稱。

3. 問題解決

-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI{
        NSString *localName = [advertisementData objectForKey:@"kCBAdvDataLocalName"];
}      
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        let localName = advertisementData["kCBAdvDataLocalName"]
}