2017-08-30 278 views
0

我正在使用藍牙低功耗與電子卡交換數據。在數據交換過程中,卡有時可能會將其設備名稱更改爲新名稱,當我修改此名稱時,我正在查找某種方式。如何檢測連接的BLE設備何時更改其名稱?

當我在開始時連接到設備時,我存儲了此設備的名稱和MAC地址,但似乎android沒有看到設備名稱已更改。其實,當我嘗試讀取這個名字時,它會將我的舊名稱還原爲新名稱,而不是新名稱。

將該例在與電子卡的每一個數據交換,每一次,這回我的老字號,即使在卡更改其名稱:

 BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE); 
     List<BluetoothDevice> devices = bluetoothManager.getConnectedDevices(BluetoothProfile.GATT); 
     for(BluetoothDevice device : devices) { 
      Log.i("BLE_device_name : ",device.getName()); 
     } 

是否有監聽嗎?或者強制Android獲取真實BLE名稱而不是記憶的名稱的方法?

我看到的唯一的解決辦法是讓新的藍牙掃描,但它是我的過程太長..

謝謝

回答

0

如果您沒有連接,您可以發出掃描和檢查廣告數據名稱是什麼(如果包含)。

如果已連接,則可以讀取包含名稱的GATT特徵。

+0

問題是,包含設備名稱的GATT特性在BLE SoC重新啓動之前不會使用新名稱進行刷新。但是,如果我嘗試重新啓動SoC,我將失去連接。 – Aznhar

+0

當您在Android中讀取GATT特性時,您總是向外圍設備發送讀取請求(在Android端不使用緩存或類似內容)。因此,根據定義,如果外設在重新啓動外設之前不更新名稱特徵值,則在重新啓動之前外設的名稱不會更新。 – Emil

相關問題