Android 6 et 7 ont des optimisations de puissance (mode veille) qui limitent la mise en réseau des applications lorsque l'appareil n'est pas utilisé.
L'utilisateur peut désactiver le mode d'optimisation pour toute application dans les paramètres de la batterie:
Est-il possible de vérifier si l'optimisation est activée pour mon application ou non? Je dois demander à l'utilisateur de désactiver l'optimisation pour améliorer les fonctionnalités de l'application, mais je ne sais pas comment le vérifier par programme.
Celui-ci était un peu difficile à dénicher: voici ce que vous recherchez
Kotlin
/**
* return false if in settings "Not optimized" and true if "Optimizing battery use"
*/
fun checkBatteryOptimized(): Boolean {
val pwrm = applicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
val name = applicationContext.packageName
if (VERSION.SDK_INT >= VERSION_CODES.M) {
return !pwrm.isIgnoringBatteryOptimizations(name)
}
return false
}
et cela pour montrer l'activité d'optimisations
fun checkBattery() {
if (isBatteryOptimized() && VERSION.SDK_INT >= VERSION_CODES.Lollipop_MR1) {
val name = resources.getString(R.string.app_name)
Toast.makeText(applicationContext, "Battery optimization -> All apps -> $name -> Don't optimize", Toast.LENGTH_LONG).show()
val intent = Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)
startActivity(intent)
}
}
Exemple de code:
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (pm != null && !pm.isIgnoringBatteryOptimizations(getPackageName())) {
askIgnoreOptimization();
} else {
accepted;
}
} else {
accepted;
}
Déclarer une variable statique
private static final int IGNORE_BATTERY_OPTIMIZATION_REQUEST = 1002;
affiche le dialogue pour BATTERY_OPTIMIZATIONS
private void askIgnoreOptimization() {
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.M) {
Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, IGNORE_BATTERY_OPTIMIZATION_REQUEST);
} else {
openNextActivity();
}
}
Peut-être que ce code vous est utile!