web-dev-qa-db-fra.com

Prise en charge de Bluetooth Smart (4.0)/GATT dans Android 4.0?

J'essaie de trouver un moyen de travailler avec des appareils Bluetooth 4.0 (AKA Bluetooth Smart) utilisant des smartphones Android modernes, à savoir - HTC One V.

Si j'ai bien compris, l'utilisation du profil GATT pose problème, même dans Android 4.0 avec du matériel Bluetooth 4.0, en raison des limitations de l'API.

J'ai vu Motorola sortir sa propre API pour BT LE, mais je ne suis pas sûr que cela fonctionnera pour d'autres fournisseurs. Mon objectif est d’obtenir un support universel pour tous les smartphones dotés du matériel approprié.

Toute suggestion de solution est très appréciée.

Alexey

PS: Oui, j'ai vu l'API Android pour HDP, mais il semble n'être utilisé qu'avec les périphériques Bluetooth «classiques» (et non ceux à faible consommation d'énergie, comme le fait le BT LE).

28
AlexeyVMP

Comme il a été découvert, la version 4.3 prend en charge BLE, mais elle est tellement défectueuse, en particulier sur les appareils Nexus. À mon avis, ce n’est pas prêt pour la production.

0
AlexeyVMP

Malheureusement, il n'y a pas d'API GATT native pour Android, simplement parce qu'Android ne supporte pas du tout Bluetooth Low Energy. Cela pourrait changer dans les prochaines versions d'Android, mais aujourd'hui, les fabricants intègrent à la place des piles Bluetooth tierces avec le support Low Energy de fournisseurs tels que Qualcomm, Broadcom ou CSR. Celles-ci possèdent leur propre ensemble d’API, ce qui limite évidemment la compatibilité à l’ensemble des téléphones qui utilisent la pile de ce fournisseur. La bonne nouvelle est que, sur d’autres plates-formes comme iOS ou Windows 8, il existe des sont bien pris en charge. Pour Android, il faudra attendre que Google décide d’intégrer le travail Linux/BlueZ effectué sur BLE avec Android. 

26
introiboad

Après quelques recherches, je peux seulement dire ceci:

  • Motorola s'est associé à Broadcom pour développer une API propriétaire. Il semblerait que ce soit extrêmement limité, car il est indiqué que seuls les profils existants sont pris en charge. Allez voir ici .

  • Samsung ne fournit aucune information concernant son API BLE, dont je peux vérifier l'existence et qui s'appelle samsung.bluetoothle . En fait, j'ai décompilé certaines applications de Google Play qui utilisent les fonctionnalités BLE de SGSIII et ai découvert quelques méthodes qui n'existent pas dans l'API BT native d'Android. Leurs noms indiquent clairement qu'elles sont liées à BLE. J'ai essayé de les utiliser par le biais de la réflexion Java et je travaille actuellement sur la possibilité de développer une bibliothèque. Mais les tests que j’ai effectués jusqu’à présent ont eu des résultats au mieux. Il existe également un fil sur le forum des développeurs de Samsung. Je vous conseillerais de faire pression ici si cela vous intéresse.

  • Google n'a fait pratiquement aucune remarque à cet égard. Il y a un thread concernant ces problèmes dans le Galaxy Nexus, que vous devriez mettre en vedette, avec beaucoup de gens qui se plaignent. La chose la plus proche d'une réponse de Google peut être trouvée ici .

[UPDATE]

Samsung a également modifié quelques classes d'Android, plus particulièrement:

  • BluetoothAdapter
  • BluetoothDevice

[UPDATE]

Depuis que j'ai mis cette question de côté pendant un moment en raison du manque de soutien de Google et de Samsung, je publierai ce que j'ai appris jusqu'à présent:

BluetoothAdapter nouvelles méthodes:

public boolean Android.bluetooth.BluetoothAdapter.leTestEnd()
public boolean Android.bluetooth.BluetoothAdapter.setAvStreaming(boolean)
public boolean Android.bluetooth.BluetoothAdapter.setScanLE(boolean)
public void Android.bluetooth.BluetoothAdapter.setScoPathChange(int)
public boolean Android.bluetooth.BluetoothAdapter.startLeDiscovery()

Pour les utiliser, procédez comme suit:

BluetoothAdapter ba = new BluetoothAdapter();
Method starteLeDiscoveryMethod = null;
starteLeDiscoveryMethod = ba.class.getMethod("startLeDiscovery");
starteLeDiscoveryMethod.invoke(ba);

REMARQUE: cette méthode fonctionne en particulier un peu comme la méthode startDiscovery() classique, mais, du moins pour moi, elle détecte le périphérique BLE 2 fois sur 5. Et rappelez-vous , cela ne concerne que leSGSIII. Je n'ai pas encore extrait les nouvelles méthodes dans BluetoothDevice, mais quand je le ferai, je les posterai ici.

13
Moises Jimenez

Le SDK 18 est maintenant supporté. Les docs sont ici:

http://developer.Android.com/guide/topics/connectivity/bluetooth-le.html

Tester sur mon Nexus 4 plante la pile Bluetooth.

2
Nick Palmer

HTC a le support BLE depuis l'année dernière avec HTC One X +, Droid DNA et bien sûr le HTC One. L'API HTC BLE était initialement disponible sur demande, mais il est maintenant téléchargeable gratuitement sur http://htcdev.com

Oui, la nouvelle API Android BLE standard de Google dans l'API Android de niveau 18 arrive très prochainement (voir l'aperçu de IO vidéo) - mais vous pouvez envelopper des API tierces (HTC, Samsung, etc.) de manière compatible. pour prendre en charge la nouvelle API standard car toutes les API sont assez similaires dans leur prise en charge du profil GATT (similaire à IOS).

1
dljava
0
Palak