新しい Motion Activity Manager API ( CMMotionActivityManager
) をテストしています。startActivityUpdatesToQueue
アプリがフォアグラウンドで実行されていないときにモーションの更新を受信して処理できるアプリを作成したいと考えています。アプリがフォアグラウンドにある間は、モーションの更新 (静止、ウォーキング、ランニング、自動車、不明) を正しく受信しますが、アプリがバックグラウンドに移行するとすぐに (したがって中断されると)、モーションの更新はアプリによって受信されなくなります。
CMMotionActivityManager クラス リファレンス: 「このメソッドは、モーション データの追跡を非同期的に開始します。このメソッドを呼び出すと、モーション アクティビティ マネージャーは、指定されたキューでハンドラー ブロックを実行し、デバイスで有効な現在のモーションを報告します。その後、モーション アクティビティ マネージャーは、モーション データが変更された場合にのみハンドラ ブロックを実行します. ハンドラ ブロックはベスト エフォート ベースで実行され、アプリが中断されている間は更新は配信されません. アプリが中断されている間に更新が到着した場合、最後の更新は次のときにアプリに配信されます実行が再開されます。アプリが中断されている間に発生したすべての更新を取得するには、queryActivityStartingFromDate:toDate:toQueue:withHandler:
メソッドを使用してください。」
アプリをバックグラウンドで実行し続け、モーション データを (リアルタイムで) 受信する方法が必要です。現在、アプリをバックグラウンドで実行し続ける唯一の方法は、バックグラウンド サービスを使用することですが、「モーション アップデート」は許可されたバックグラウンド サービスのリストにありません。
「2.5.4マルチタスク アプリは、バックグラウンド サービスを意図された目的でのみ使用できます: VoIP、オーディオ再生、位置情報、タスク完了、ローカル通知など。」
位置情報の更新 (GPS) を常にオンにしたくありません (バッテリーを節約するため)。継続的な位置情報の更新を頼りにしていても、GPS をオフにすると、アプリが中断されます。
アプリをバックグラウンドで実行し続け、モーション アクティビティの更新を受信する方法を教えてください。それを行う方法があるに違いありません: Strava アプリを試してみました....アプリがバックグラウンドにある場合でも、ユーザーが実行を一時停止すると GPS がオフになります。ユーザーが実行を再開すると、自動的に GPS がオンになります (アプリがバックグラウンドにある間はすべて)。これはおそらく、アプリがバックグラウンドで実行されており、GPS がオフのときでもモーション アクティビティの更新をアクティブに受信していることを意味します。