Android 8.0(API レベル 26)は電力消費を抑えるため、アプリがバックグラウンドで実行されている間、アプリがユーザーの現在地を取得する回数を制限しています。このような状況では、アプリが位置情報の更新を受信できるのは 1 時間に数回だけです。
注: この制限は、アプリのターゲット SDK バージョンにかかわらず、Android 8.0(API レベル 26)以降を搭載するデバイスで使用されるすべてのアプリに適用されます。
アプリがバックグラウンドで実行されているときにリアルタイム アラートまたは動作検出機能を必要とする場合、この位置取得動作に留意することが特に重要になります。
フォアグラウンド アプリの動作が保持される
Android 8.0(API レベル 26)が実行されているデバイスでアプリがフォアグラウンドにある場合、位置情報のアップデートの動作は、Android 7.1.1(API レベル 25)以下での動作と同じです。
警告:アプリが長期間にわたりほぼリアルタイムで位置情報のアップデートを取得していると、デバイスの電池寿命が大幅に短くなります。
アプリの位置情報動作を調整する
アプリが位置情報のアップデートを受信する頻度が少ない場合は、バックグラウンドで実行されているアプリのユースケースが成功するかどうかを検討します。まったく成功しない場合は、次のいずれかのアクションを実行すると、位置情報のアップデートを取得する頻度を増やすことができます。
- アプリをフォアグラウンドで操作します。
-
startForegroundService()
を呼び出して、アプリでフォアグラウンド サービスを開始します。このようなフォアグラウンド サービスがアクティブの場合、アプリの通知エリアに進行中の通知が表示されます。注意: Android 11(API レベル 30)以降を搭載したデバイスで、アプリがバックグラウンドで実行中にフォアグラウンド サービスを開始する場合、ユーザーがアプリに
ACCESS_BACKGROUND_LOCATION
権限を付与していない限り、アプリは位置情報にアクセスできません。詳しくは、フォアグラウンド サービスに関連する使用中の制限に関するガイダンスをご覧ください。 -
消費電力量を最小限に抑えるように最適化されている Geofencing API の要素(
GeofencingClient
など)を使用します。 - 頻繁に位置情報のアップデートをリクエストしているフォアグラウンド アプリがある場合は、位置情報のアップデートをより速く受信できるパッシブな位置情報リスナーを使用します。
注: アプリからアップデートが頻繁な位置情報履歴にアクセスする必要がある場合は、FusedLocationProviderApi
インターフェースなど、融合された位置予測プロバイダ API 要素のバッチ バージョンを使用します。アプリがバックグラウンドで実行されていると、この API は非バッチ API よりも頻繁にユーザーの位置を受信します。ただし、1 時間に数回だけ、アプリが引き続きアップデートをバッチで受信することに注意してください。
影響を受ける API
バックグラウンド アプリの位置情報取得動作を変更すると、次の API に影響があります。
- Fused Location Provider(FLP)
-
-
アプリがバックグラウンドで実行されている場合、アプリの新しい位置が位置検出システム サービスによって計算されるのは 1 時間に数回だけです。アプリが頻繁に位置情報のアップデートをリクエストするときにも適用されます。
ただし FLP の バッチ バージョンを使用すると、アプリがバッチ アップデートを受信した後はより頻繁に位置情報履歴にアクセスできます。こちらも発生するのは 1 時間に数回のみです。
- アプリがフォアグラウンドで実行されている場合、位置情報のサンプリング レートは Android 7.1.1(API レベル 25)から変更はありません。
-
- ジオフェンス
-
- バックグラウンド アプリは、融合された位置予測プロバイダからのアップデートよりも頻繁にジオフェンス遷移イベントを受信できます。
- ジオフェンス イベントに対する平均的な応答性は 2 ~ 3 分ごとです。
- GNSS Measurements と GNSS Navigation Message
-
- アプリがバックグラウンドで動作している場合、
GnssMeasurement
とGnssNavigationMessage
からの出力を受信するために登録されたコールバックの実行は停止します。
- アプリがバックグラウンドで動作している場合、
- Location Manager
-
-
位置情報のアップデートがバックグラウンド アプリに提供されるのは、1 時間に数回だけです。
注: Google Play サービスがインストールされているデバイスでアプリが実行されている場合は、代わりに融合された位置予測プロバイダ(FLP)を使用することを強くおすすめします。
-
- Wi-Fi Manager
-
startScan()
メソッドがバックグラウンド アプリのフルスキャンを実行するのは、1 時間に 2 ~ 3 回だけです。バックグラウンド アプリでフルスキャンの直後にこのメソッドを再度呼び出した場合は、直前のスキャンでキャッシュされた結果がWifiManager
クラスから提供されます。