アプリが実行されていないときでも、コアBluetoothがアプリを起動しようとしています。
Apple が述べているように、「状態の保存と復元は Core Bluetooth に組み込まれているため、アプリはこの機能を選択して、システムにアプリの中央マネージャーと周辺マネージャーの状態を保存し、特定の Bluetooth 関連タスクを実行し続けるように要求できます。これらのタスクのいずれかが完了すると、システムはアプリをバックグラウンドで再起動し、アプリにその状態を復元してイベントを適切に処理する機会を与えます。」
この機能をオプトインするために、次のコードを追加しました。
myCentralManager =
[[CBCentralManager alloc] initWithDelegate:self queue:nil
options:@{ CBCentralManagerOptionRestoreIdentifierKey:
@"myCentralManagerIdentifier" }];
しかし、アプリが起動したときのコールバックはトリガーされませんでした。
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
-(void)centralManager:(CBCentralManager *)central
willRestoreState:(NSDictionary *)state {
}
これらの 2 つが呼び出されることはありません。
このウェイクアップ機能をテストする方法:
info.plist のバックグラウンド モードに「bluetooth central」を追加して、BLE がバックグラウンドで実行されるようにします。
私のiPhone No.1でcentralManagerを起動します。スキャン開始。
ホームを押して外に出て、メモリを大量に消費するゲームをプレイすると、デバッグログに次のように表示されます:「メモリ不足のため終了しました。プロセスは終了コード0で終了しました」これは、iOS システムがメモリ不足のためにバックグラウンド アプリを終了する方法をシミュレートするためです。
別のiphone2号でビーコンを起動し、ブロードキャストを開始します。
結果: これらの再起動コールバックは呼び出されません。
これが機能しない理由はありますか?API の問題である場合、携帯電話が BLE ビーコンに近づいたときにアプリを BLE でバックグラウンドに再起動する他の方法はありますか? ibeacon を使用してアプリを起動しようとしましたが、コア Bluetooth セントラル マネージャーでは、バックグラウンドで ibeacon に接続できません。
ありがとう!