19

特定のBluetoothLowEnergyデバイスが範囲内に入ったときに通知を受ける必要があるアプリを作成しました。BLEデバイスに気付いた場合、私のアプリはタイムスタンプを保存するだけです。

WWDC 2012 Core Bluetoothビデオで述べられているように、CoreBluetoothを使用するときにバックグラウンドモードで動作するアプリには2つの可能性があります。

イベントの背景

イベントのバックグラウンドは、BluetoothLowEnergyデバイスと対話するときにほとんどのアプリが使用するものです。このモードでは、アプリがバックグラウンドにある場合はアクセサリと直接通信できませんが、アプリと通信する場合はアクセサリからの通知が提供されます。アプリがバックグラウンドにある場合、iOSはBTLEアクセサリに接続されたままになり、通知を監視し続けます。接続されたBTLEアクセサリに通知が利用可能になると、iOSは、アクセサリがアプリと通信することをユーザーに通知し、ユーザーがアプリをロードしてアクセサリを操作できるようにします。多くのデバイスは電力を節約する必要があるため、決定論的な時間に情報を提供するだけで、アクセサリとiPhone4Sのバッテリー寿命が大幅に向上します。

  • このモードでは、info.plistエントリは必要ありません。

セッションの背景

アプリがバックグラウンドで実行されている場合でも、アプリがアクセサリと対話する必要がある場合があります。心拍数をリアルタイムで監視する必要がある実行中のアプリについて考えてみます。このモデルには明確な開始と停止があります。ユーザーはアプリで実行を開始します。実行がアクティブである間、アプリは実行が完了するか停止するまで心拍数情報を読み取ります。セッションのバックグラウンドでは、アプリがバックグラウンドにあるときにスキャンしてBTLEアクセサリに接続することもできます。アプリがバックグラウンドにある場合でも、scanForPeripheralsWithServicesまたはconnectPeripheral呼び出しは続行されます。CoreBluetoothは、アプリが探しているサービスに一致する特定の周辺機器または周辺機器を引き続き監視し、見つかったときまたは接続されたときにアプリのデリゲートを呼び出します。留意します、BTLEペリフェラルまたはiPhone4Sがその無線を使用するたびに、それぞれのデバイスの利用可能な電力が枯渇していること。セッションベースのバックグラウンドを使用するアプリ開発者は、電力使用量に注意する必要があります。

  • セッションのバックグラウンド処理には、アプリinfo.plistのUIBackgroundModes(bluetooth-central)へのバックグラウンドモードエントリが必要です。

これまで、セッションのバックグラウンド(それに応じたinfo.plistエントリを使用)。アプリはiOSにすべての既知のデバイスを取得するように要求し、探しているデバイスに接続コマンドを与えます。接続コールバックは、アプリがバックグラウンドで実行されてから数分後にも発生します。

ただし、アプリは1時間後に一時停止されます。これは、次にユーザーがアプリを起動したときに、対象のBLEデバイスが目撃されたかどうかを判断できないことを意味します。

だから私の質問は:特定のBLEデバイスが範囲内に入ったときにバックグラウンドに送信されてから数日後でもユーザーの操作なしでアプリに通知を受け取り、タイムスタンプを保存できるようにすることは可能ですか?

4

3 に答える 3

15

iOS 7 の時点で、ユースケースは簡単にサポートできるようになりました。iOS 7 より前は、アプリケーションはその周辺機器に関する通知を登録でき、システムが配信する通知を受け取ったときにバックグラウンドで起動されていました。ただし、アプリがバックグラウンドにあるときや再起動中にシステムがメモリ不足になった場合、アプリは再起動されません。CBCentralManageriOS 7 では、とに状態の復元が追加されましCBPeripheralManagerた。そのため、前述の条件のいずれかが原因でアプリケーションが実行されていなかった場合でも、OS は限られた容量でアプリケーションを再起動します。詳細については、CoreBluetooth ガイドを参照してください。

つまり、ユースケースでは、次のことができます。

  • bluetooth-centralバックグラウンド実行モードとして引き続きサポートします。
  • ここの「状態の保存と復元のサポートの追加」に記載されているように、状態の保存と復元をオプトインします。
于 2013-10-21T18:18:50.253 に答える
3

いいえ、iOS では、アプリがバックグラウンドで動作し続けるという保証はありません。ドキュメントは言う:

ただし、このメソッドは、アプリケーションがバックグラウンドで (中断されずに) 実行されており、何らかの理由でシステムがアプリケーションを終了する必要がある場合に呼び出されることがあります。

( applicationWillTerminateのドキュメント)

于 2013-03-19T15:36:04.677 に答える