Разрешение на отключение оптимизации заряда батареи продолжает появляться в Android API 28, несмотря на то, что оно не было изменено

#java #android #battery

#java #Android #батарея

Вопрос:

Это происходит со мной на устройстве Xiaomi, по крайней мере, в эмуляторе, этого не происходит.

Чтобы было более понятно, что происходит, это следующее:

Мне нужно, чтобы оптимизация заряда батареи была отключена для правильного запуска некоторых служб из моего приложения.

Но без изменения конфигурации происходит то, что я получаю диалоговое окно с предупреждением о том, что батарея не отключена, и о необходимости использовать его при повторном запуске приложения, поскольку оно было снова включено.

Мне все равно, связано ли это с уровнем персонализации в телефоне, и обычно он работает на других устройствах, поскольку я не могу надеяться заставить приложение работать на 100% в любом телефонном терминале, но было бы проблемой, если бы оптимизация заряда батареи снова была включена без предупреждения на большинстве устройств.

Есть ли какой-либо способ избежать включения автоматической оптимизации заряда батареи? Или, по крайней мере, это обычно происходит только на нескольких устройствах с этим API?

Ответ №1:

К сожалению, для некоторых поставщиков разрешения на оптимизацию батареи фактически не позволяют вашему приложению игнорировать оптимизацию батареи 🙂

Huawei, Xiaomi, Meizu и некоторые другие производители могут заблокировать выполнение вашего приложения, даже если у него есть все разрешения. Поэтому разработчикам приходится думать о некоторых обходных путях. Также вы можете связаться с технической поддержкой Xiaomi, чтобы спросить их, есть ли какой-либо способ заставить ваше приложение работать. Иногда они могут помочь.

Что касается запроса разрешений. Мы используем следующий код в нашем приложении для этого и пока не получили никаких жалоб:

 
if (isMarshmallowOrHigher()) {
    val pm = getSystemService(POWER_SERVICE) as PowerManager
    val isIgnoringBatteryOptimizations = pm.isIgnoringBatteryOptimizations(
            packageName
    )
    if (!isIgnoringBatteryOptimizations) {
        val intent = Intent()
        intent.action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
        intent.data = Uri.parse("package:$packageName")
        startActivityForResult(intent, ignoreOptimizationsRequest)
    }
}