78 votes

Que peuvent faire exactement les applications CoreBluetooth en tâche de fond?

Le sujet dit tout, vraiment. De la Documentation, dans la mesure où elle existe, suggère que les applications écrites contre la CoreBluetooth cadre de l'exécution sur les appareils iOS peuvent ajouter "bluetooth-central" à leur parcours de privilège liste, et ainsi de processus d'une sorte de Bluetooth événements inactives, mais qui exacte des événements de le faire et ne pas livrée?

Par exemple:

  1. Puis-je transporter sur les communications avec un appareil que j'ai déjà établi une liaison avec?
  2. Puis-je émettre des périodiques de la découverte des demandes pour trouver des appareils qui sont hors de portée / je n'ai jamais vu avant? (Par exemple, si je voulais être en mesure de livrer une notification lorsqu'un nouveau dispositif intéressant est rencontré)
  3. Que faire si un appareil se met hors de portée, puis revient? Vais-je avoir déconnecté et connecté événements sans intervention de l'utilisateur, ou ai-je besoin d'être mis au premier plan et ont explicitement à l'utilisateur demande de reconnexion?

120voto

Chris Smowton Points 1016

Personne ne semblait savoir, j'ai donc acheté un compte développeur iOS et a couru quelques expériences. Voici ce que j'ai trouvé:

Lors de l'exécution au premier plan, vous pouvez démarrer une numérisation à l'aide de CBCentralManager::scanForPeripheralsWithServices. Votre analyse peut être limitée à des dispositifs de publicité pour un service particulier, ou sans restriction (passage du néant pour que l'appel du paramètre). Il peut également autoriser ou interdire les doublons; dans le premier cas, vous obtiendrez un didDiscoverPeripheral de rappel à chaque fois que l'iPhone reçoit une publicité paquets; dans le second, vous obtiendrez seulement un rappel par appareil.

Lorsque vous entrez dans le fond, les règles semblent être comme suit:

  • Si vous utilisiez une libre analyse, il sera silencieusement annulée. Vous n'obtiendrez pas tout didDiscover rappels.
  • Si votre analyse a été restreinte (c'est à dire que vous avez spécifié un ou plusieurs Uuid de services que vous recherchez), votre analyse de continuer à fonctionner, mais la permettre les doublons drapeau sera ignoré. Cela signifie que vous ne obtenez didDiscoverPeripheral rappels pour les nouveaux appareils. Si tous les périphériques ont été observés alors que, dans le premier plan, vous n'aurez pas de rappels à tous.
  • Le démarrage et l'arrêt de l'analyse ne permet pas de réinitialiser les appareils qui sont considérées comme nouvelles. Si il y a un périphérique présent, vous ne recevrez qu'un seul rappel, même à travers de multiples analyses, à moins que...
  • Si vous vous connectez à un périphérique, puis débranchez, puis relancez la numérisation, l'appareil sera énuméré à nouveau (c'est à dire, vous obtiendrez un plus appel à didDiscoverPeripheral). Je suppose que iOS ce qui concerne que d'avoir "montré de l'intérêt" dans l'appareil.

Je ne sais pas si les tentatives de connexion à nonconnectable périphériques (par exemple, POUR les Annonceurs, comme ceux de la mise en œuvre de la proximité de profil) est assez bon comme mon exemple les appareils sont connectable. Cependant, au moins pour les appareils contrôlables, ce scan/se connecter/déconnecter/procédure de scan suffit d'interrogation pour un appareil de la présence à l'arrière-plan.

Les résultats ci-dessus ont été recueillies à l'aide d'un iPhone 4S sous iOS 5.0.1

9voto

mash Points 165

En plus de Chris réponse:

  • Si votre application a "bluetooth-central" mode d'arrière-plan et est connecté à un périphérique, vous pouvez recevoir des notifications (peripheral:didUpdateValueForCharacteristic:error:) à partir du périphérique en arrière-plan, même après 10 minutes.

Ainsi, lorsque vous voulez continuellement exécuter en arrière-plan, vous avez 2 options:

  • Exécutez l' "de connexion, de déconnexion, de scanner à nouveau" en boucle
  • Prendre le périphérique envoyer des notifications

Plus tard, devrait être l'Événement de "semi-finition" de la WWDC 2012 Core Bluetooth vidéos https://developer.apple.com/videos/wwdc/2012/ Mais l'ancien ressemble à un hack, je ne veux pas compter sur elle.

J'ai testé cela sur iPhone5, iOS6.1.4


Apple a enfin publié le Core Bluetooth Guide de Programmation et voici la note officielle à propos de

Core Bluetooth Traitement en arrière-plan pour les Applications iOS

7voto

user108 Points 61

Il est également bon de noter le comportement de la semi-finition et CoreBluetooth liées à la iBeacons, bien qu'Apple aime à penser à cela comme une CoreLocation fonctionnalités:

  1. Lorsque les notifications pour un iBeacon région sont activés, ils informera l'utilisateur de la région d'entrée ou de sortie. Ces notifications peuvent être subordonnée au fait que l'écran soit allumé ou éteint. Ces notifications de travail, même lorsque l'application requérant des notifications est en arrière-plan. (C'est beaucoup plus clair dans la documentation).

  2. Pas si évident: Si vous utilisez le iBeacon allant de l'API, alors votre application doit être au premier plan. Il ne disent pas explicitement présent dans la documentation-- en fait, on peut être induits en erreur de penser que l'on doit travailler dans l'arrière-plan de la documentation. Cependant, une Pomme ingénieur précise cela dans un post, enfouie quelque part dans un long fil sur le site Apple developer forum, et je l'ai vu aussi échouer. Allant fonctionne uniquement dans le premier plan.

  3. On peut découvrir d'autres services concernés par un périphérique de publicité iBeacons. Mais cela ne fonctionnera que dans le premier plan. Donc, si vous voulez la centrale pour être averti de la proximité à l'aide de iBeacons, et ensuite faire d'autres opérations à l'aide d'autres BLE basée sur les services, cela va fonctionner, mais seulement dans le premier plan. Il ne fonctionne pas en arrière-plan. Pour les transactions avec BLE à base de services dans le fond, la publicité doit être régulièrement BLE annonce, pas un iBeacon. Vous ne pouvez pas utiliser un iBeacon publicité pour aider le processus de découverte de l'arrière-plan, puis passer à l'utilisation de BLE-services en arrière-plan. (J'aurais beaucoup aimé faire ce travail, mais pas de dés).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X