web-dev-qa-db-fra.com

Vérifier si l'optimisation de la batterie est activée ou non pour une application

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:

 Android settings screenshot

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.

9
Nik

Celui-ci était un peu difficile à dénicher: voici ce que vous recherchez 

PowerManager.isIgnoringBatteryOptimizations ()

14
FriendlyMikhail

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)
    }
}
9
Evgenii Vorobei

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!

1
Yogesh Rathi