2017-08-30 2 views
0

J'utilise le Bluetooth basse consommation pour échanger des données avec une carte électronique. Lors de l'échange de données, la carte peut parfois changer son nom d'appareil en un nouveau, je cherche un moyen de détecter quand ce nom est modifié.Comment détecter lorsqu'un périphérique BLE connecté change de nom?

Je stocke le nom et l'adresse MAC de cet appareil lorsque je me connecte à l'appareil au début, mais il semble que Android ne voit pas que le nom de l'appareil a changé. En fait, quand j'ai essayé de lire le nom, il me renvoie l'ancien nom et non le nouveau.

cet exemple est appelé à chaque échange de données avec la carte électronique, et chaque fois, il me renvoie l'ancien nom, même après la carte changer son nom:

 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()); 
     } 

Y at-il auditeur pour cela? Ou une méthode pour forcer Android à obtenir le vrai nom BLE et non celui mémorisé?

La seule solution que je vois est de faire une nouvelle analyse Bluetooth, mais il est trop long pour mon processus ..

merci

Répondre

0

Si vous n'êtes pas connecté, vous pouvez émettre un balayage et vérifier la données de publicité quel est le nom (si elle est incluse).

Si vous êtes connecté, vous pouvez lire la caractéristique du GATT qui contient le nom.

+0

Le problème est que la caractéristique du GATT qui contient le nom du périphérique n'est pas actualisée avec le nouveau nom tant que le SoC BLE n'est pas redémarré. Mais si j'essaie de redémarrer le SoC, je perds ma connexion. – Aznhar

+0

Lorsque vous lisez une caractéristique GATT dans Android, vous envoyez toujours une requête de lecture au périphérique (aucun cache ou similaire n'est utilisé du côté Android). Donc, par définition, si votre périphérique ne met pas à jour la valeur caractéristique du nom jusqu'à ce que vous redémarriez le périphérique, le nom du périphérique ne sera pas mis à jour tant que vous ne redémarrerez pas. – Emil