2016-04-20 2 views

Répondre

1

Notre expérience avec BLE sur Android a été indiquant clairement les opérations multithread sur la pile BLE Android peut causer de nombreux problèmes ..;)

Je vous suggère de faire une chose à la fois et essayer d'éviter parallèle travail ...

Nos 2 cents ...

+0

Merci pour votre réponse :) – Parth

+0

@ p2pkit "Je vous suggère de faire une chose à la fois et essayer d'éviter le travail parallèle ..." - recommanderiez-vous cela par connexion, ou à travers toutes les connexions étant maintenu par l'application (si je suis connecté à plus d'un périphérique simultanément)? c'est-à-dire cette question: http://stackoverflow.com/questions/28016571/robustly-communicating-with-multiple-ble-devices-simultaneously-on-android – stkent

+0

Je recommande de faire une seule chose à travers toutes les connexions et si possible ouvrir un seul connexion. Selon notre expérience, les connexions parallèles ont entraîné beaucoup de problèmes. – p2pkit

0

This is one des meilleures prises en pension, je l'ai trouvé pour travailler avec la pile BLE dans Android. Mais il ne donne pas de traitement parallèle des opérations. Je pense que si vous travaillez au niveau SDK, il n'y a vraiment aucun moyen de faire des opérations parallèles parce que vous n'avez aucun contrôle de bas niveau.

Il existe une nouvelle bibliothèque RXAndroidBLE, je ne l'ai pas utilisée, mais cela peut être utile. Il y avait une discussion about it here. Ils ont apparemment pu connecter 5 capteurs simultanément et traiter des données ... Bien que cela aurait été encore séquentiel.

+0

merci @ninerdelta Je vais vérifier selon la bibliothèque RXAndroid Ble – Parth

+0

FWIW, j'ai une application qui peut se connecter à 5 appareils BLE, et il utilise une approche très similaire au premier lien. L'idée de base est simplement de mettre en place une file d'attente pour traiter les rappels à mesure qu'ils arrivent. Bien sûr, c'est le résumé de très haut niveau! –

1

Pour pouvoir vous connecter à plusieurs périphériques en même temps, vous devez utiliser la fonction de connexion automatique plutôt que la connexion directe (http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context,%20boolean,%20android.bluetooth.BluetoothGattCallback)).

Si vous utilisez la connexion automatique, le téléphone peut lancer plusieurs connexions en même temps. Si vous utilisez la connexion directe, une seule connexion peut être lancée en même temps. Cependant, une fois que vous êtes connecté, vous pouvez exécuter toutes les opérations gatt en parallèle, bien que vous ne puissiez avoir qu'une seule opération gatt en cours à la fois par périphérique.

+1

Ceci est partiellement vrai. L'indicateur Autoconnect n'affecte pas les connexions parallèles. Vous pouvez aussi les faire en mode direct. Nous l'avons testé pendant le développement de la bibliothèque (RxAndroidBLE). Vous devez savoir que vous devez mettre les appels en file d'attente dans la connexion, mais la bibliothèque le fait pour vous. –

+1

Comment voulez-vous dire? Si vous utilisez la connexion directe plutôt que la connexion automatique, elle tentera uniquement de se connecter à un périphérique à la fois. Au moins pour Android standard sur les appareils Nexus. Regardez simplement le snooplog hci. – Emil

+0

Je veux dire que vous pouvez utiliser une file d'attente et vous connecter l'une après l'autre en mode direct. La vitesse de connexion directe est beaucoup plus rapide. –