には居眠りモードは、私は、問題の回避策を見つけたcom.android.internal.location.GpsLocationProviderのソースコードを読んだ後、私はそれ送ることに気づいありませんでしたcom.android.internal.location.ALARM_WAKEUPインテントは、位置情報提供者の居眠りを防止しました。だから私は、10秒ごとにテントをブロードキャスト居眠りからGPSを保つために、私は私のサービスクラスに次のように追加:
[...]
private Handler handler;
private PowerManager powerManager;
private PendingIntent wakeupIntent;
private final Runnable heartbeat = new Runnable() {
public void run() {
try {
if (isRecording && powerManager != null && powerManager.isDeviceIdleMode()) {
LOG.trace("Poking location service");
try {
wakeupIntent.send();
} catch (SecurityException | PendingIntent.CanceledException e) {
LOG.info("Heartbeat location manager keep-alive failed", e);
}
}
} finally {
if (handler != null) {
handler.postDelayed(this, 10000);
}
}
}
};
@Override
public void onCreate() {
handler = new Handler();
wakeupIntent = PendingIntent.getBroadcast(getBaseContext(), 0,
new Intent("com.android.internal.location.ALARM_WAKEUP"), 0);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TrackService");
[...]
}
私が居眠り何を知ってるのためである、しかしそれは_my_デバイスだと私のことができるようになり私にとって有用な目的のためにバッテリーを消耗させてもいいと宣言します。この場合、GPSトラックを記録します。それはまた、珍しいユースケースでもありません。例えば、ランキーパとストラヴァは同じことをする必要があります。デバイスがドーズに入るのを止めることはハックだと思われ、バッテリーの寿命を延ばすためのものと戦うために画面をオンにしなければならないのは、私にとっては逆のようです。 –
@ KorneliusElstnerデバイスを使用している場合は、ドーズモードにはなりません。ユーザーがデバイスを動かして目を覚ますと、システムはDozeを終了し、すべてのアプリケーションは通常の動作に戻ります。 – mattm