ここに入力を希望します。iOS CoreBluetooth:状態の保存と復元
現在のiOSプロジェクトでは、CoreBluetoothを迅速に使用しています。このアプリは基本的に動作するバックグラウンドでCoreBluetoothを使って通信することができます。周辺機器は、期待どおりに動作するために、iOSデバイスとのアクティブな接続が必要です。接続が切断されるたびに、周辺機器は現在の動作を停止します。これはメモリ圧のためにアプリが終了したときにも発生します。その場合、周辺機器は動作を停止すべきではないので、問題があります。それを解決するために、私は基本的に述べている状態の保存および復元バックグラウンドモードを実装するapples core bluetooth programming guideを続い:
- は復元識別子とCentralManagerを初期化します。デリゲート=自己。
- willRestoreStateデリゲートメソッドを実装します。 NSLogの内容
- launchOptionsで特別なキーを確認します。 NSLogの何か。
私はこの共通のプロジェクトを使用してiOSにバックグラウンドでのアプリケーションを閉じるように強制します:BackgroundKill。もちろん、アプリケーションはデバッグモードでは実行されていないため、重要なポイントにNSLogステートメントを追加してデバイスコンソールで検索します。良いニュース:アプリが終了したときに接続がもうキャンセルされないため、iOSは接続を維持して周辺機器が動作を停止しないように動作しています。ストライク!この時間中は、アプリが購読しているバッテリーサービスを除き、中央と周辺機器との間に通信はありません。アクティブな接続を確立する唯一の理由は、周辺機器の動作を停止することです。
ここで手動でアプリを再起動すると、上記のNSLogが表示されません。 willRestoreStateデリゲートは呼び出されず、launchOptionsはnilになりません。 CentralManagerをインスタンス化するときに、 "DISPATCH_QUEUE_CONCURRENT"というキューをnilの代わりに使用しようとしました。効果なし。
アプリケーションを再起動するとき、保存された接続をどのように使用する必要がありますか? willRestoreStateデリゲートが呼び出されないのはなぜですか?私はここに何かを逃していますか状態の保存と復旧を使用するためには、バックグラウンドでデータを受信し/強制的にシステムによって強制的にデータを受信することは必須ですか?
ありがとうございます。 :)
あなたのアプリがバックグラウンドで復元された直後にwillRestoreStateを呼び出す必要があります。アイコンの後にアプリを起動すると、すでに実行されているので何も特別なことはない可能性があります。また、ドキュメントによれば、復元するものがない場合は、willRestoreStateの代わりにdidUpdateStateメソッドが最初に呼び出されます。 – KoCMoHaBTa