android - Compruebe si la optimización de la batería está habilitada o no para una aplicación
powermanager android-powermanager (4)
Android 6 y 7 tienen algunas optimizaciones de energía (modo doze) que restringen las redes de aplicaciones cuando no se usa el dispositivo.
El usuario puede deshabilitar el modo de optimización para cualquier aplicación en la configuración de la batería:
¿Es posible verificar si la optimización está habilitada para mi aplicación o no? Necesito pedirle al usuario que desactive la optimización para una mejor funcionalidad de la aplicación, pero no sé cómo verificarla programáticamente.
Código de muestra :
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;
}
Declarar variable estática
private static final int IGNORE_BATTERY_OPTIMIZATION_REQUEST = 1002;
Mostrar diálogo para 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();
}
}
¡Puede ser que este código te sea útil!
Este fue un poco difícil de rastrear: esto es lo que estás buscando
Agregue este permiso en su manifiesto.
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
Solicitar lista blanca / optimización habilitó su aplicación
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent intent = new Intent();
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);
}
}
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
}
y esto para mostrar la actividad de optimizaciones
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)
}
}