Je développe actuellement une application qui utilisera le Bluetooth Low Energy (testé sur le Nexus 4). Après avoir commencé à utiliser les API BLE officielles dans Android 4.3, j'ai remarqué qu'après avoir connecté un appareil pour la première fois, je suis rarement capable de me connecter / communiquer avec cet appareil ou tout autre appareil.
En suivant le guide aquí Je peux me connecter avec succès à un appareil, analyser les services et les caractéristiques, et lire/écrire/recevoir des notifications sans aucun problème. Cependant, après m'être déconnecté et reconnecté, je suis souvent incapable d'analyser les services/caractéristiques ou d'effectuer une lecture/écriture. Je ne trouve rien dans les journaux qui indique pourquoi cela se produit.
Lorsque cela se produit, je dois désinstaller l'application, désactiver le Bluetooth et redémarrer le téléphone avant qu'elle ne fonctionne à nouveau.
Chaque fois qu'un périphérique est déconnecté, je m'assure d'appeler close() sur l'objet BluetoothGatt et de lui donner la valeur null. Des idées ?
EDIT :
Décharges de journaux : Pour ces journaux, j'ai enraciné mon téléphone et augmenté le niveau de traçage des éléments connexes dans /etc/bluetooth/bt_stack.conf.
Connexion réussie - Première tentative après avoir redémarré le téléphone et installé l'application. Je suis capable de me connecter, de découvrir tous les services/caractéristiques, et de lire/écrire.
Échec de la première tentative - Il s'agit de la tentative suivante après la déconnexion de la connexion réussie ci-dessus. Il semble que j'ai pu découvrir des caractéristiques, mais la première tentative de lecture a renvoyé une valeur nulle et s'est déconnectée peu après.
Échec de la deuxième tentative - Un exemple où je ne suis même pas capable de découvrir les services/caractéristiques.
EDIT 2 :
Le dispositif auquel j'essaie de me connecter est basé sur la puce CC2541 de TI. J'ai obtenu un TI SensorTag (également basé sur le CC2541) pour jouer avec et a découvert que TI a sorti une application Android pour le SensorTag hier. Cependant, cette application a le même problème. J'ai testé ceci sur deux autres Nexus 4s avec le même résultat : La connexion au SensorTag est réussie la première ou la deuxième fois, mais (selon les journaux) ne parvient pas à découvrir les services par la suite, ce qui provoque toutes sortes de plantages. Je commence à me demander si c'est un problème avec cette puce spécifique ?
0 votes
Veuillez poster les journaux complets de votre téléphone depuis le démarrage jusqu'à ce que vous rencontriez le problème.
0 votes
@AAnkit Je viens d'ajouter les vidages de journaux correspondants.
0 votes
Pouvez-vous ajouter un extrait de code ou un pseudo-code de ce que vous faites afin que nous puissions faire de notre mieux pour reproduire sur d'autres appareils fonctionnant en 4.3 ? Merci
0 votes
J'ai parcouru tous les journaux et il ne semble pas y avoir de raison de se déconnecter. Avez-vous essayé de tester avec un autre appareil distant ?
0 votes
Je ne sais pas si cela peut être utile, mais j'utilise un Nexus 4 connecté à un CC2541 et je n'ai aucun problème.
0 votes
@AAnkit J'ai récemment testé la connectivité avec une carte d'un autre fabricant et cela semble fonctionner parfaitement. Cependant, dès que je reviens au dispositif CC2541 ou au SensorTag, le problème commence - je ne peux même plus me connecter à l'autre carte.
0 votes
Il semble que d'autres utilisateurs de Nexus 4 et de Nexus 7 (2012) dans le Forums TI E2E rencontrent le même problème avec le SensorTag. Nous avons attiré l'attention d'un des développeurs de TI et nous espérons qu'il sera en mesure de nous donner plus d'informations.
0 votes
Il peut s'agir d'un problème de périphérique distant alors.
0 votes
J'ai remarqué le même comportement (je ne peux me connecter qu'une seule fois, puis je dois redémarrer) avec le cardiofréquencemètre H7 de Polar sur le Nexus 4 avec Android 4.3.
0 votes
Je reçois aussi souvent le 129 (GATT_INTERNAL_ERROR) et surtout le 133 (GATT_ERROR). Ces codes m'ont été communiqués par les responsables du BLE SDK de Samsung. Il y en a d'autres : img-developer.samsung.com/onlinedocs/samsung_ble_docs_200/ Ils semblent être les mêmes puisque toute leur API est très similaire.
0 votes
Pourriez-vous avoir la gentillesse de publier les sources de votre application pour le public (ou pour moi ;) ) car j'ai également acheté un SensorKit mais je ne sais pas par où commencer. J'ai réussi à faire fonctionner l'exemple de Google et je peux voir le SensorKit mais je ne suis pas capable de lire aucun des capteurs.
0 votes
Et en plus : L'exemple Bluetooth de Google ne parvient pas à se connecter. Peut-être que cela peut vous aider
0 votes
J'ai repéré dans votre "failed"-log la ligne
L2CA_EnableUpdateBleConnParams - unknown BD_ADDR <your device address>
ce qui n'apparaît pas dans votre journal de "succès". Il en va de même pour mes expériences de test. Cependant, il s'agit juste d'une conséquence de la déconnexion, qui est énoncée quelques lignes plus tôt à 124 avecGATT ATT protocol channel with BDA: 9059af043336 is disconnected
J'ai une puce BlueGiga au fait.0 votes
Je reçois aussi
Unknown conn ID:
en entrant pastebin.com/AhZq17bU Je reçois ça peu aprèsregisterApp()
. Au 10ème moment, je reçoisUnknown conn ID: 10 D/BtGatt.btif(1077): btgattc_handle_event: Event 1000 E/bt-btif(1077): Register with GATT stack failed. failed. (about 20 times) D/BtGatt.btif(1077): btif_gattc_upstreams_evt: Event 0 E/BtGatt.btif(1077): bta_to_btif_uuid: Unknown UUID length 10! D/BtGatt.GattService(1077): onClientRegistered() - UUID=00000000-408a-6f08-ffff-fe58b0e98d19, clientIf=0 E/BtGatt.ContextMap(1077): Context not found for UUID 00000000-408a-6f08-ffff-fe58b0e98d19
0 votes
@Johnnycube Exemple Google Bluetooth ne parvient pas non plus à se connecter après plusieurs connexions à plusieurs appareils BLE. Exactement le même comportement et les mêmes entrées de journal. Je parle du projet dans
sdk\samples\android-18\legacy\BluetoothLeGatt
que vous pouvez à télécharger via le gestionnaire SDK Android3 votes
J'utilise un Samsung Galaxy S4 avec l'édition Google d'Android 4.3 installée ; après de nombreuses connexions/déconnexions, lorsque je découvre des services, j'obtiens 129(GATT_INTERNAL_ERROR) et un onConnectionStateChange avec le statut 133 (GATT_ERROR), state = BluetoothProfile.DEVICE_DISCONNECTED.
1 votes
Une ou deux fois, j'ai reçu plusieurs rappels de statut 129 et 133 dans un court laps de temps et je n'ai jamais pu recevoir de rappel dans BluetoothGattCallback jusqu'à ce que je redémarre mon appareil (mais le balayage est correct).
1 votes
J'oublie de dire que je teste avec une dizaine d'appareils utilisant des puces TI (désolé, je ne connais pas leurs modèles) et un appareil avec des puces Nordic. L'appareil avec les puces Nordic ne rapporte jamais d'erreur (pas assez pour prouver que le problème est spécifique à TI, cependant).
0 votes
@OneWorld J'ai beaucoup travaillé sur le Keyfob et le Sensorkit avec des puces TI et si BluetoothLeGatt ne parvient pas à se connecter, il se connecte à la tentative suivante. J'utilise un galaxy nexus. D'un autre côté : L'application officielle TI Sensorkit agit comme vous le décrivez.
0 votes
@Johnnycube Je veux savoir combien d'appareils vous connectez ? Dans mon cas, si je ne connecte/déconnecte que quelques appareils, il n'y a pas de problème particulier. Cependant, lorsque je me connecte à plus d'appareils, disons 10 ou 15, il est facile d'obtenir des erreurs et parfois le BluetoothGattCallback répond simplement à rien. Bien sûr, j'ai peut-être mal géré la connexion multiple, mais je veux juste savoir si quelqu'un peut le faire avec succès.
1 votes
Je peux confirmer que ce problème existe toujours sur le Samsung Galaxy S5 (les deux) G900VVRU2BOG5 y G900VVRU2BOA8 version de construction). Si j'efface les données de Paramètres>Gestionnaire d'applications>>Tous>>Bluetooth mais cela fonctionne pour le moment.