web-dev-qa-db-fra.com

Combinez iBeacon bluetooth low energy 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 indique que je ne devrais pas interroger ces données, mais pour la détection, ce serait inutile.

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

39
rekire

EDIT: La bibliothèque ci-dessous a maintenant é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 iOS7 iBeacon sur Android et j'ai pu voir les iBeacons standard et estimer leur portée. Le code est disponible ici:

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

Pour que cela fonctionne, vous avez besoin de Android 4.3 qui a introduit les API Bluetooth à faible énergie. Vous avez également besoin d'un appareil avec un chipset Bluetooth à faible énergie.

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

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

67
davidgyoung

Le seul problème ici est de détecter la balise même si l'application n'est pas en cours d'exécution. Contrairement à iOS7, il n'est pas pris en charge nativement. Dans iOS7, lorsque vous sur votre BT, il vous avertira automatiquement lorsque vous entrez dans la région de l'iBeacon enregistré.

J'avais implémenté iBeacon dans Android 4.3 API utilisant IntentService plus AlarmManager. Pour effectuer une analyse toutes les 30 secondes (pour économiser la batterie, elle sera plus longue). Cela fonctionne bien pour l'utilisateur. Uniquement lorsque l'uuid/major/minor correspondant est trouvé, puis il déclenchera des notifications. Sinon, il se mettra en veille et se réveillera pour une nouvelle analyse.

je pense que c'est la solution à votre question.

2
Alfred Loh

Je n'ai pas bien compris ce que vous voulez dire, pourriez-vous fournir des liens vers la documentation qui disait 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 destiné à 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 des "balises" et que le téléphone lui-même ne soit qu'un auditeur. Donc, vous ne sonderiez pas les données EHPE et EVPE mais vous devriez en fait écouter ses changements ou "diffusions".

Je suis moi-même un peu nouveau dans ce domaine et je n'ai trouvé aucune documentation vraiment spécifique.

Cependant, sachez que 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.

0
user2637046