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"]
}