1

Je suis en train de développer une application qui doit fonctionner en continu et suivre certaines caractéristiques périphériques.CoreBluetooth "willRestoreState" - que devrait-on faire exactement là-bas?

Tout fonctionne bien à l'avant-plan.
Cela fonctionne également en arrière-plan, mais je ne suis pas sûr de le faire correctement.

Je publie de nombreux articles sur la restauration d'état et l'implémentation willRestoreState, mais beaucoup d'entre eux ne sont pas explicites et vous indiquent ce qu'il faut faire lorsque cette méthode est appelée.

Le processus que je fais va comme ceci:

Je crée un gestionnaire central à l'aide

myCentralManager = 
     [[CBCentralManager alloc] initWithDelegate:self queue:nil 
     options:@{ CBCentralManagerOptionRestoreIdentifierKey: 
     @"myCentralManagerIdentifier" }]; 

A partir de là que je fais le du flux régulier :
attente pour que le gestionnaire central soit mis sous tension (centralManagerDidUpdateState) -> Rechercher mon périphérique -> Se connecter -> Découvrir le service -> Découvrir la caractéristique -> S'abonner à la caractéristique -> Lire les données

Alors je tue mon application avec

kill(getpid(), SIGKILL); 

J'attends quelques secondes, puis commence la publicité à nouveau de mon périphérique.

Ensuite, je peux voir que le processus revient à la vie, et mes journaux montrent que didFinishLaunchingWithOptions dans AppDelegate est appelée.

Je puis restaurer le gestionnaire central comme celui-ci:

NSArray *identifiers = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey]; 

    if (identifiers && identifiers.count > 0) { 
     _centralManager = [[CBCentralManager alloc] initWithDelegate:self 
                   queue:nil 
                  options:@{CBCentralManagerOptionRestoreIdentifierKey:[identifiers objectAtIndex:0]}]; 
    } 

Je peux aussi voir que willRestoreState et centralManagerDidUpdateState sont appelés se.

Voici où je suis perdu. Que dois-je faire ensuite? Si je suis continuer à faire le flux régulier (que je décrit ci-dessus, tout semble fonctionner correctement -. Et de la même manière que ci-dessus

Mais - Est-ce que je fais la bonne chose

dois-je faire quelque chose? ? dans willRestoreState Si oui, ce que je devrais faire

Merci à l'avance

Répondre

0

, fondamentalement, vous êtes remis de nouveau le périphérique qui est déjà connecté -! vous devez enregistrer une référence à elle et vous fixer son délégué cela. c'est mon code, c'est plutôt simple:

  • (void) centralManager: (CBCentralManager *) willRestoreState central: (NSDictionary *) dict {

    // obtenir la poignée au périphérique déjà connecté par l'os et nous définir comme le délégué NSArray périphériques = dict [CBCentralManagerRestoredStatePeripheralsKey]; si (périphériques.nombre> 0) { CBPeripheral pr = périphériques [0]; // Définir les valeurs périphériques requises et commencer à découvrir les services [pr setDelegate: self]; [pr readRSSI]; [pr discoverServices: nil];

    }}