La création de services d'arrière-plan pour Bluetooth low energy sur Android

Fond:

Idéalement, j'aimerais que mon appareil Android à un balayage de Bluetooth de Basse Énergie des appareils de tous les temps et la possibilité de démarrer une application à chaque fois qu'un nouvel appareil avec des propriétés spécifiques s'affiche.

De sorte que le paquet de diffusion dans le BLE sera par exemple énumérer un ensemble de services fournis par les organismes de radiodiffusion de l'appareil. Une application sera ensuite en mesure d'enregistrer un intérêt pour certains services et automatiquement a commencé quand un appareil avec ce service vient en gamme.

De ce que je comprends, ce n'est pas comment la Android BLE API travaille? Alors, comment puis-je obtenir quelque chose de similaire?

La plus simple possible exemple:

J'ai un BLE capteur qui enregistre la température ambiante au cours du temps. Chaque fois que mon téléphone Android, c'est assez proche je veux me connecter et de télécharger toutes les données, l'envoi de certains solution de stockage en cloud. Cette application ne seraient pas besoin de l'interface graphique (au moins pas d'après la configuration est faite). Mais comment doit-il exécuter en arrière-plan sans décharger la batterie, mais encore me donner une assez bonne chance de raccordement de l'appareil rapidement une fois qu'il est dans la gamme?

Question:

Dois-je configurer un compte à rebours et le réveil de l'application à chaque fois dans un tout manuellement, puis commencer la numérisation? Ce genre d'intervalles je puis. Combien de temps puis-je laisser le scanner de course, sans nuire à l'autonomie de la batterie?

Solution Possible:

C'est ce que j'ai trouvé jusqu'à présent.

  • Une configuration de l'activité pour régler les intervalles et appareils pour rechercher
  • La configuration de l'activité va mettre en place un WakefulBroadcastReceiver similaire à la Planificateur exemple
  • Lorsque le récepteur est le onReceive cas je commence un BLE du service d'analyse (que j'ai écrit) que l'éveil de service.
  • Le service de numérisation commence à balayage (avec un rappel enregistré).
  • Le service peut obtenir adv rapports qu'elle peut agir sur
  • Après un délai d'attente, le service va arrêter de le scanner et de mettre fin à l'éveil de service.

Cela fonctionne, mais je ne suis pas sûr que c'est la meilleure façon. Aussi, je ne sais combien de petits intervalles je peux avoir et encore éviter de détruire la vie de la batterie. Ce que je veux, c'est de commencer la numérisation toutes les deux minutes, un balayage de 10 à 20 secondes. Mais j'ai peur que ce serait assez fréquemment pour réveiller l'appareil?

  • Moi aussi, j'ai la même question. Si quelqu'un peut expliquer, ce serait génial.
  • La numérisation de l'arrière-plan est assez facile. Le faire sans vider la batterie est tout à fait différent. Comme vous l'avez probablement vu dans la Bluetooth LE code de l'échantillon, la numérisation est un processus actif.
  • Pourquoi a-t-elle un processus actif? J'ai commencer la numérisation et d'obtenir la publication des rapports des rappels. Entre le dispositif pourrait dormir. Je ne sais pas comment cela fonctionne sur Android, mais sur une faible puissance périphérique intégré le CPU serait sommeil pendant que la radio est en cours d'exécution.
  • L'exécution de la radio à balayage de dispositifs est un processus actif qui prend de la batterie.
  • Le BLE radio est presque certainement une connectivité de l'appareil, le sens qu'il peut fonctionner le scanner alors que le PROCESSEUR principal est de dormir. Il est appelé à faible énergie pour une raison. La radio doit être en mesure d'exécuter un scanner à moins de 200uA en moyenne. Qui est négligeable par rapport au PROCESSEUR principal. Le PROCESSEUR principal devrait se réveiller, démarrer le scanner et de se rendormir en moins de 1ms (peut-être quelques centaines de nous) et puis dormir pendant que la radio est de scanner que de se réveiller pour gérer la publicité des rapports (qui devrait à nouveau prendre une couple de cents us événement de relations publiques).