バックグラウンド位置情報の制限

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 など)を使用します。
  • パッシブな位置情報リスナーを使用してください。フォアグラウンド アプリが位置情報の更新をより速いペースでリクエストしている場合は、位置情報の更新を早く受け取ることができます。

注: アプリが頻繁に更新される位置情報履歴にアクセスする必要がある場合は、Fused Location Provider API 要素のバッチ バージョン(FusedLocationProviderApi インターフェースなど)を使用してください。アプリがバックグラウンドで実行されている場合、この API は非バッチ API よりも頻繁にユーザーの位置情報を受け取ります。ただし、アプリは引き続き 1 時間に数回のみ、アップデートをバッチで受信します。

影響を受ける API

バックグラウンド アプリでの位置情報取得動作の変更は、以下の API に影響します。

Fused Location Provider(FLP)
  • アプリがバックグラウンドで実行されている場合、位置情報システム サービスはアプリの新しい位置情報を 1 時間に数回だけ計算します。これは、アプリがより頻繁に位置情報の更新をリクエストしている場合でも当てはまります。

    ただし、FLP の バッチ バージョンを使用すると、アプリがバッチ アップデートを受信した後でも、より頻繁に位置情報履歴にアクセスできます。バッチ アップデートも 1 時間に数回しか発生しません。

  • アプリがフォアグラウンドで実行されている場合は、Android 7.1.1(API レベル 25)から位置情報のサンプリング レートに変更はありません。
ジオフェンス
  • バックグラウンド アプリがジオフェンス移行イベントを受信する頻度は、Fused Location Provider からの更新よりも高い場合があります。
  • ジオフェンス イベントの平均応答性は約数分ごとです。
GNSS Measurements と GNSS Navigation Message
  • アプリがバックグラウンドにあると、GnssMeasurementGnssNavigationMessage からの出力を受け取るように登録されているコールバックの実行が停止します。
Location Manager
  • 位置情報の更新がバックグラウンド アプリに提供されるのは、1 時間に数回のみです。

    注: Google Play 開発者サービスがインストールされているデバイスでアプリを実行している場合は、代わりに Fused Location Provider(FLP)を使用することを強くおすすめします。

Wi-Fi Manager
startScan() メソッドは、バックグラウンド アプリのフルスキャンを 1 時間に数回のみ実行します。バックグラウンド アプリが直後にこのメソッドを再度呼び出した場合、WifiManager クラスは前回のスキャンのキャッシュされた結果を提供します。