2017-06-28 74 views
2

私は、単一のロケーションアップデートを取得する必要があるフォアグラウンドサービスを提供しています。AndroidのDozeモードでフォアグランドサービスが位置更新を受信しないO

これは特定のブロードキャストによって開始され、開始時には単にバックエンドに対して要求を行います。別のブロードキャストを受信すると、位置の更新を要求し(1回)、別のバックエンド要求を行い、次に停止します。

編集:明確にするために、サービス自体が位置更新とバックエンド要求を行います。それはその点でメインアプリから独立しています。

これは、電話機が起きているとき、またはドーズモードのときに、LollipopとMarshmallowでうまくいきます。しかし何らかの理由で、Android Oでは、Dozeモードではサービスが決して位置情報を更新しません。両方の状況で最初の要求が通過するので、ネットワークは正常に機能します。また、位置情報要求が実行されている間に私が電話を起動すると、更新情報が取得されます。メンテナンスウィンドウに入れても同じです。

Android Oはbackground locationにいくつかの制限を導入していますが、ページに言及すると、フォアグラウンドのアプリの動作(アプリの表示またはフォアグラウンドサービスの実行)は維持され、Androidの以前のバージョンと似ています。

これはデベロッパーのプレビューの問題か、私が逃した制限ですか?

+0

だけ明確にするために、両方のサービスから作られるネットワーク要求との位置更新要求されていますか? – Noel

+0

@ Noel yep。 – Jukurrpa

答えて

0

LocationUpdatesForegroundServiceサンプルをご覧ください。Code Samples for Android O、多分あなたは何か間違っています。

LocationUpdatesForegroundServiceサンプル - アプリの活動が見え ない場合に位置更新を取得するために フォアグラウンドサービスを使用する方法を示します。 Android Oで実行されているアプリ( Android 7.0(APIレベル24)以下のアプリ)でも、バックグラウンドの更新は1時間に数回だけ に制限されています。フォアグラウンドサービスを使用すると、より頻繁な更新を受信することができます。

GitHubの上でそれを取得:Java

+0

私は 'PendingIntent'(私のサービスがバックグラウンドのものだった時から残っています)を使っていましたが、サービスの' Looper'と一緒に 'LocationCallback'で置き換えましたが、問題は修正されませんでした。 – Jukurrpa

+0

私はコードサンプルをテストしましたが、**動作しません(デバイスがドーズ状態になると場所の更新はありません)**。 誰でもadbを使用してdozeを強制実行し、テストすることができます。 ADBのコマンドは です。 'adb shell dumpsys battery unplug'と ' adb shell dumpsys deviceidle force-idle' – VishalKale

+0

フォアグランドサービス(関連する通知付き)を実行しているアプリケーションは、dozeによって制限されていません。 – phnmnn

関連する問題