1

私はいくつかの周辺特性を連続的に実行して追跡する必要があるアプリケーションを開発しています。CoreBluetooth "willRestoreState" - 正確に何をすべきか?

すべてフォアグラウンドで問題なく動作します。
これもバックグラウンドで動作しますが、正しく動作するかどうかはわかりません。

状態復旧とwillRestoreStateの実装に関する多くの投稿が赤くなっていますが、このメソッドの呼び出し時に何をすべきかを明示的に指示するものはありません。私が作ってるんだ

プロセスはこのように書きます:

私はここで私がの定期的な流れやってるから

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

を使用して中央マネージャを作成しています:
ウェイティング中央管理者が電源をオンにする(centralManagerDidUpdateState) - >周辺機器をスキャンする - >接続する - >サービスをディスカバーする - >特性をディスカバーする - >特性を登録する - >データを読み込む

は、それから私は、私は数秒を待っている

kill(getpid(), SIGKILL); 

を使用して私のアプリを強制終了した後、私の周辺から再び広告を開始します。

私はプロセスが生き生きとしているのを見ることができ、私のログはAppDelegateのdidFinishLaunchingWithOptionsが呼び出されていることを示しています。

私は、このような中央マネージャ復元:

NSArray *identifiers = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey]; 

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

を私はまたwillRestoreStatecentralManagerDidUpdateStateが呼び出さなっていることがわかります。

ここで私は失われています。 次に何をすればよいですか?

上記と同じ方法で、しかし - - 。私は上記の通常の流れを(やり続けるんだ場合は、すべてが正常に動作するようです、私は正しいことをやっている

は、私が何かをするべきか? ?willRestoreState ではそうならば、私は何をすべき事前に

感謝を

答えて

0

基本的にあなたがすでに接続されている周辺機器を返還している - ?!あなたはそれへの参照を保存して、自分でそのデリゲートを設定する必要があり、この。私のコードですが、それはかなりまっすぐです:

  • (無効)centralManager:(CBCentralManager *)中央willRestoreState:(NSDictionaryの*)のdict {

    //すでにOSによって接続された周辺のハンドルを取得し、デリゲート にNSArrayとして自分自身を設定します周辺機器= dict [CBCentralManagerRestoredStatePeripheralsKey]; if(周辺機器は )。カウント> 0) { CBPeripheral pr =ペリフェラル[0]; //周辺機器に必要な値を設定し、サービスの検出を開始します [pr setDelegate:self]; [pr readRSSI]; [pr discoverServices:nil];

    }}

関連する問題