Combinez le Bluetooth basse consommation iBeacon avec Android 4.3

Je cherche un moyen de détecter iBeacon (fonctionnalité iOS 7.0) à partir d’un appareil Android. J’ai lu la documentation Android, où il semble que l’iBeacon est une sorte de serveur GATT qui envoie sa position. Alors que la documentation Android dit que je ne devrais pas interroger ces données, mais pour la détection, cela serait nessary.

Je google beaucoup mais ce sujet est assez nouveau (j’ai même créé un nouveau tag ibeacon ) alors je serais heureux si je recevais des liens vers des ressources du monde iOS qui décrivent l’implémentation. Aussi, s’il y a des bibliothèques Android que je n’ai pas encore trouvées, ce serait bien.

EDIT: La bibliothèque ci-dessous a été supprimée, mais une bibliothèque de remplacement est maintenant disponible ici:

https://github.com/AltBeacon/android-beacon-library


J’ai porté les SDK iBeacon d’iOS7 sur Android et j’ai pu voir les iBeacons standard et estimer leur scope. Le code est disponible ici:

https://github.com/RadiusNetworks/android-ibeacon-service

Pour que cela fonctionne, vous avez besoin d’Android 4.3 qui a introduit les API Bluetooth Low Energy. Vous avez également besoin d’un appareil avec un chipset Bluetooth basse consommation.

Si vous ne souhaitez pas utiliser la bibliothèque complète ci-dessus, vous pouvez lancer la vôtre. Les iBeacons transmettent simplement une publicité BLE une fois par seconde qui commence par une séquence d’octets connue. Vous devez simplement dire à Android de faire une parsing BLE, obtenir chaque publication et en rechercher une qui commence par la séquence d’octets iBeacon connue. Vous pouvez ensuite parsingr les champs iBeacon. Voici le code le montre comment cela se fait:

https://github.com/RadiusNetworks/android-ibeacon-service/blob/master/src/com/radiusnetworks/ibeacon/IBeacon.java#L177-L231

Le seul problème ici est de détecter la balise, même si l’application ne fonctionne pas. Contrairement à iOS7, ce n’est pas un support natif. Dans iOS 7, lorsque vous utilisez votre BT, il vous avertit automatiquement lorsque vous entrez dans la région de iBeacon enregistrée.

J’avais implémenté iBeacon dans l’API Android 4.3 en utilisant IntentService plus AlarmManager. Pour effectuer une parsing toutes les 30 secondes (pour économiser votre batterie, celle-ci sera plus longue). Cela fonctionne bien pour l’utilisateur. Ce n’est que lorsque l’uuid / major / minor correspondant est trouvé que les notifications sont déclenchées. Sinon, il va dormir et se réveiller pour une nouvelle parsing.

Je pense que c’est la solution pour votre question.

Je n’ai pas bien compris ce que vous voulez dire, pourriez-vous fournir des liens vers la documentation indiquant que vous ne devriez pas interroger les données?

Mais il me semble que l’iBeacon fonctionne comme un serveur, ce qui est plutôt amusant pour moi. N’est-ce pas censé trouver d’autres appareils, pas le téléphone lui-même?

https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.position_quality.xml

Ce sont les caractéristiques qu’il utilise cependant. Pour moi, il semble que les appareils que vous recherchez soient les “balises” et que le téléphone lui-même ne soit qu’un écouteur. Donc, vous n’interrogez pas les données EHPE et EVPE, mais vous devriez réellement écouter ses modifications ou “diffusions”.

Je suis un peu nouveau pour moi aussi et je n’ai pas trouvé de documentation vraiment spécifique.

Cependant, soyez averti, dans le lien que j’ai fourni, il y a un lien de téléchargement dans le coin supérieur qui vous fournira la documentation complète au format PDF. Vous y trouverez probablement plus de réponses.