Ich denke, diese Frage wird oft im Stackoverflow gefragt, aber immer noch so viele Menschen kämpfen, um es zu lösen.Doze-Modus ist kritisch für meine App
In meiner Android-App muss ich Gerät alle 30 Minuten aufwecken, um den aktuellen Standort zu erhalten und es an den Server zu senden. Dazu habe ich den AlarmManager mit der Methode setExactAndAllowWhileIdle() und WakefulBroadcastReceiver verwendet. Es funktioniert gut in fast allen Standard/populären Geräten, aber einige andere Geräte meist China Geräte nicht unterstützen oder können nicht Gerät aufwachen aus Doze-Modus mit setExactAndAllowWhileIdle(). Ich habe es in Moto G4 plus (Android OS 6.1) Gerät getestet, die nicht erlauben Alarm-Manager in bestimmten Abständen aufwachen.
Ich benutze AlarmManager, um wakefulBroadcastReceiver aufzurufen, der trigers weckfulIntentservice Hintergrundaufgabe ausführen. aber seine Batterie kritisch und auch im dösen Modus (Nougat), seine Hintergrundaufgabe nicht ausführend. anders als sonst, seine Erfassung von Daten aus Back-End-Service.
my code is here->>
// Setup periodic alarm every 30 minutes
if (android.os.Build.VERSION.SDK_INT >= 23) {
syncDbAlarmManager.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP,
intervalMillis, pIntent);
} else if (android.os.Build.VERSION.SDK_INT >= 19
&& android.os.Build.VERSION.SDK_INT < 23){
syncDbAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis/*firstMillis*/,
intervalMillis, pIntent);
} else {
syncDbAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis/*firstMillis*/,
intervalMillis, pIntent);
}
ich verwendet habe, Powermanager auch ->
PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"com.example.johnbravado");
wakeLock.acquire();
// Do Work
MyConstants.getInstance().msgReqAction(intent.getIntExtra(MyConstants.BROADCAST_DATA_REQ, 0));
wakeLock.release();
aber es verbraucht zu viel Batterie und funktioniert auch nicht nach dem Schlafengehen (Doze) -Modus. @FabioC –
Nein, ich lasse wakeLock nicht frei. Standardmäßig wird der Dienst nach dem Wechsel in den Energiesparmodus überhaupt nicht gestartet. –