私の知る限り、ユーザーの介入なしでアプリを起動する唯一の方法は、アプリが VoIP サービスを使用する場合です。Bluetooth LE (BTLE) デバイスを検出するには、ユーザーが設計したアプリのバックグラウンドで CBCentralManager インスタンスが実行されている必要があります。そうしないと、近くにある BTLE デバイスを検出する方法がありません。
アプリを設計している場合、core-bluetooth には 2 種類のバックグラウンド処理 (イベントとセッション) が有効になっています。
イベントの背景
イベントのバックグラウンド処理は、おそらくほとんどのアプリが Bluetooth Low Energy デバイスと対話するときに使用するものです。このモードでは、アプリがバックグラウンドにある場合にアクセサリへの直接通信は許可されませんが、アプリとの通信が必要な場合はアクセサリからの通知が提供されます。アプリがバックグラウンドにある場合、iOS は BTLE アクセサリに接続されたままになり、通知を監視し続けます。接続された BTLE アクセサリに利用可能な通知がある場合、iOS は、アクセサリがアプリと通信したいことをユーザーに通知し、ユーザーがアプリをロードしてアクセサリと対話できるようにします。多くのデバイスは電力を節約する必要があるため、確定的なタイミングで情報を提供するだけで、アクセサリと iPhone 4S のバッテリー寿命が大幅に向上します。
- このモードでは、info.plist エントリは必要ありません。
セッションのバックグラウンド処理
バックグラウンドで実行されている場合でも、アプリがアクセサリと対話する必要がある場合があります。心拍数をリアルタイムで監視する必要がある実行中のアプリを考えてみましょう。このモデルには明確なスタートとストップがあります。ユーザーはアプリでランニングを開始します。ランニングがアクティブな間、アプリはランニングが完了するか停止するまで心拍数情報を読み取ります。セッションのバックグラウンド化により、アプリがバックグラウンドにある間に BTLE アクセサリをスキャンして接続することもできます。アプリがバックグラウンドにある場合でも、scanForPeripheralsWithServices または connectPeripheral の呼び出しは続行されます。CoreBluetooth は、アプリが探しているサービスに一致する特定の周辺機器または周辺機器を引き続き監視し、見つかった場合または接続された場合にアプリのデリゲートを呼び出します。BTLE 周辺機器または iPhone 4S が無線を使用するたびに、それぞれのデバイスの利用可能な電力を使い果たしています。セッション ベースのバックグラウンド処理を使用するアプリ開発者は、電力の使用に注意する必要があります。
- セッションのバックグラウンド処理には、Apps info.plist の bluetooth-central である UIBackgroundModes へのバックグラウンド モード エントリが必要です。