2017-09-17 2 views
0

Je suis en train d'écrire une application Android qui utilise Bluetooth LE pour se connecter à notre appareil.Android onCharacteristicChanged plusieurs paquets au même horodateur

L'une des notifications qui viendront de notre appareil est de savoir s'il est sur un chargeur ou non. Il s'agit d'une notification qui se déclenche une fois et ne se déclenche plus tant que le statut ne change pas.

Sur iOS, tout cela est fameux.

Sur Android, cependant, lorsqu'il est connecté à studio Android de toute façon, je vais parfois lors de l'exécution voir un paquet entre en « onCharacteristicChanged » qui est au moment X, suivi du même paquet exact au exactement le même temps au exactement la même caractéristique.

Parfois, lors de l'exécution, je n'en vois qu'une (attendue). Parfois, 2 copies de celui-ci, et parfois 4 copies de celui-ci.

C'est complètement fou et je ne sais pas pourquoi ça se passe. Je ne cours pas ma pile de bluetooth comme service ou n'importe quoi.

Est-ce un "vrai" problème, ou juste un problème d'enregistrement? Je demande parce qu'il y a d'autres paquets que nous avons dans d'autres caractéristiques qui ont des numéros de séquence (ne l'ont pas encore activé), et je crains que ces paquets échouent parce que nous aurons des numéros de séquence en double!

+0

Je pense que vous avez activé la notification de caractéristique à chaque fois. assurez-vous que vous l'avez activé seulement la première fois. –

Répondre

0

Je pense avoir trouvé le problème. Je ne vérifiais pas l'état dans le rappel onConnectionStateChange. Si je voyais que l'état était connecté, j'ai assigné aveuglément le gatt et commencé le reste de mon processus pour envoyer des commandes à l'appareil.

Je pense que j'ai aussi eu un problème où je suis toujours appelle connectGatt au lieu de connecter si le gatt existait déjà. Je dois dire, alors que c'est une erreur de l'utilisateur de ma part, les API Android sont vraiment idiot à cet égard. Vous n'avez pas à vous soucier de savoir "connecter" pour appeler et surveiller chaque rappel de changement d'état, s'inquiéter du thread sur lequel vous êtes et si certains objets sont déjà alloués.