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

Android 8.0 は電力消費を抑えるため、アプリが対象とする SDK バージョンに関係なく、バックグラウンド アプリがユーザーの現在地を取得する回数を制限しています。

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

重要: 初期状態では、バックグラウンド アプリは 1 時間に数回だけ位置情報のアップデートを受信できるようになっています。Preview では、システムへの影響とデベロッパーからのフィードバックに基づき、位置情報のアップデート間隔を引き続き調整します。

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

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

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

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

Android 8.0 を実行している端末でアプリがフォアグラウンドになっていると、位置情報のアップデートの動作は、Android 7.1.1(API レベル 25)以下での動作と同じです。

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

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

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

  • アプリをフォアグラウンドで操作します。
  • アプリのフォアグラウンド サービスを利用します。このサービスがアクティブであると、アプリの通知エリアに現在進行中の通知が表示されます。
  • 消費電力量を最小限に抑えるように最適化されている GeofencingApi インターフェースなどの Geofencing API の要素を使用します。
  • フォアグラウンド アプリがより頻繁に位置情報の取得をリクエストしている場合、位置情報のアップデートをより速く受信する可能性があるパッシブな位置情報リスナーを使用します。

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

影響を受ける API

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

融合された位置予測プロバイダ(FLP)
  • アプリがバックグラウンドで実行されていると、位置検出システム サービスは、Android 8.0 での動作変更点で定義した間隔に従い、アプリの新しい位置を 1 時間に数回だけ計算します。これはアプリがより頻繁な位置情報のアップデートをリクエストするときにも適用されます。
  • アプリがフォアグラウンドで実行されている場合は、Android 7.1.1(API レベル 25)との比較においても、位置情報のサンプリング レートに変更はありません。
Geofencing
  • バックグラウンド アプリは、融合された位置予測プロバイダからのアップデートよりもさらに頻繁にジオフェンシング遷移イベントを受信できます。
  • ジオフェンシング イベントに対する平均的な応答性は 2~3 分毎です。
GNSS Measurements と GNSS Navigation Message
  • アプリがバックグラウンドで実行されていると、GnssMeasurementGnssNavigationMessage からの出力を受信するために登録されているコールバックは実行を停止します。
Location Manager
  • 位置情報のアップデートは、Android 8.0 での動作変更点で定義した間隔に従い、1 時間に数回だけバックグラウンド アプリに提供されます。

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

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