android powermanager android-powermanager

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!



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) } }