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

Android 8.0(API レベル 26)は電力消費を抑えるため、バックグラウンド アプリがユーザーの現在地を取得する回数を制限しています。アプリが位置情報のアップデートを受信できるのは、1 時間に数回だけです。

注: この制限は、アプリのターゲット SDK バージョンにかかわらず、Android 8.0(API レベル 26)以降を搭載するデバイスで使用されるすべてのアプリに適用されます。

アプリがバックグラウンドで実行されているときにリアルタイム アラートまたは動作検出機能を必要とする場合、この位置取得動作に留意することが特に重要になります。

システムはフォアグラウンド アプリとバックグラウンド アプリを区別します。次のいずれかに当てはまる場合、そのアプリはフォアグラウンドにあると見なされます。

  • 可視アクティビティがある(アクティビティが開始されているか一時停止されているかに関係なく)。
  • フォアグラウンド サービスを使用している。
  • 別のフォアグラウンド アプリが該当アプリのいずれかのサービスにバインドされるか、該当アプリのいずれかのコンテンツ プロバイダを使用することで、フォアグラウンド アプリが該当アプリに接続している。たとえば、フォアグラウンド アプリが、他のアプリ内で次のいずれかのコンポーネントにバインドされている場合は、そのアプリはフォアグラウドにあると見なされます。

これらのいずれの条件にも該当しない場合、アプリはバックグラウンドにあると見なされます。

フォアグラウンド アプリの動作が保持される

Android 8.0(API レベル 26)が実行されているデバイスでアプリがフォアグラウンドにある場合、位置情報のアップデートの動作は、Android 7.1.1(API レベル 25)以下での動作と同じです。

警告: アプリが長期間にわたりほぼリアルタイムで位置情報のアップデートを取得していると、デバイスの電池寿命が大幅に短くなります。

アプリの位置情報動作を調整する

アプリが位置情報のアップデートを受信する頻度が少ない場合は、バックグラウンドで実行されているアプリのユースケースが成功するかどうかを検討します。まったく成功しない場合は、次のいずれかのアクションを実行すると、位置情報のアップデートを取得する頻度を増やすことができます。

  • アプリをフォアグラウンドで操作します。
  • startForegroundService() を呼び出して、アプリでフォアグラウンド サービスを開始します。このようなフォアグラウンド サービスがアクティブの場合、アプリの通知エリアに進行中の通知が表示されます。
  • 消費電力量を最小限に抑えるように最適化されている Geofencing API の要素(GeofencingClient など)を使用します。
  • 頻繁に位置情報のアップデートをリクエストしているフォアグラウンド アプリがある場合は、位置情報のアップデートをより速く受信できるパッシブな位置情報リスナーを使用します。

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

影響を受ける API

バックグラウンド アプリの位置情報取得動作を変更すると、次の API に影響があります。

融合された位置予測プロバイダ(FLP)
  • アプリがバックグラウンドで実行されている場合、アプリの新しい位置が位置検出システム サービスによって計算されるのは 1 時間に数回だけです。アプリが頻繁に位置情報のアップデートをリクエストするときにも適用されます。

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

  • アプリがフォアグラウンドで実行されている場合、位置情報のサンプリング レートは Android 7.1.1(API レベル 25)から変更はありません。
ジオフェンス
  • バックグラウンド アプリは、融合された位置予測プロバイダからのアップデートよりも頻繁にジオフェンス遷移イベントを受信できます。
  • ジオフェンス イベントに対する平均的な応答性は 2~3 分ごとです。
GNSS Measurements と GNSS Navigation Message
  • アプリがバックグラウンドで実行されていると、GnssMeasurementGnssNavigationMessage からの出力を受信するために登録されている callback は実行を停止します。
Location Manager
  • 位置情報のアップデートがバックグラウンド アプリに提供されるのは、1 時間に数回だけです。

    注: Google Play サービスがインストールされているデバイスでアプリが実行されている場合は、代わりに融合された位置予測プロバイダ(FLP)を使用することを強くおすすめします。

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