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