Looking for android Answers? Try Ask4KnowledgeBase
Looking for android Keywords? Try Ask4Keywords

Android Le mode API23 + Doze interfère avec AlarmManager


Exemple

Android 6 (API23) a introduit le mode Doze qui interfère avec AlarmManager. Il utilise certaines fenêtres de maintenance pour gérer les alarmes. Même si vous avez utilisé setExactAndAllowWhileIdle() vous ne pouvez pas vous assurer que votre alarme se déclenche au moment voulu.

Vous pouvez désactiver ce comportement pour votre application en utilisant les paramètres de votre téléphone ( Settings/General/Battery & power saving/Battery usage/Ignore optimizations ou similaire)

Dans votre application, vous pouvez vérifier ce paramètre ...

String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName)) {
   // your app is ignoring Doze battery optimization
}

... et éventuellement afficher la boîte de dialogue des paramètres respectifs:

Intent intent = new Intent();
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);