1. 程式人生 > 程式設計 >iOS藍芽裝置名稱快取問題的解決方法

iOS藍芽裝置名稱快取問題的解決方法

1. 問題背景

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

2. 問題分析

當 APP 為中心連線其他的藍芽裝置時。

首次連線成功過後,iOS系統內會將該外設快取記錄下來。

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

如果此期間藍芽裝置更新了名稱,(peripheral.name)這個引數並不會改變,所以需要換一種方式獲取裝置的名稱,在廣播資料包內有一個欄位為 kCBAdvDataLocalName,可以實時獲取當前裝置名稱。

3. 問題解決

下面給出OC 和 Swift 的解決方法:

OC

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

Swift

func centralManager(_ central: CBCentralManager,didDiscover peripheral: CBPeripheral,advertisementData: [String : Any],rssi RSSI: NSNumber) {
    let localName = advertisementData["kCBAdvDataLocalName"]
}

總結

到此這篇關於iOS藍芽裝置名稱快取問題的解決方法的文章就介紹到這了,更多相關iOS藍芽裝置名稱快取內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!