先上代码
AndroidManifest.xml中申请权限
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
Activity中实现:
override fun onCreate(savedInstanceState: Bundle?) {
......
if (!isIgnoringBatteryOptimizations()) {
requestIgnoreBatteryOptimizations();
}
}
private fun isIgnoringBatteryOptimizations(): Boolean {
var isIgnoring = false
val powerManager = getSystemService(POWER_SERVICE) as PowerManager
isIgnoring = powerManager.isIgnoringBatteryOptimizations(packageName)
return isIgnoring
}
private fun requestIgnoreBatteryOptimizations() {
try {
//此Intent是在当前应用界面弹出提示框,供用户选择;Samsung S7和Xiaomi note3可用,且无设置路径
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
//上一个Intent对Huawei Mate10pro不支持,提示没有响应此Intent的Activity,故换成下面的Intent,跳转到设置界面
//val intent = Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)
//Approach 1:
//startActivity(intent)
//Approach 2: 因为startActivityForResult在ComponentActivity中被废弃了,故需要用替代方案来获取result
//startActivityForResult(intent, 200)
resultLauncher.launch(intent)
} catch (e: Exception) {
e.printStackTrace()
}
}
private var resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data: Intent? = result.data
// Do something
}
}
真机效果
- Samsung Galaxy S7 - Android 7.0
| ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS | ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS |
|---|---|
![]() | ![]() |
| 没有在设置中找到打开/关闭的路径 | 此界面应该是被隐藏了,用户无法自主找到 |
- Xiaomi note3 - Android 8.0.1
| ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS | ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS |
|---|---|
![]() | ![]() |
| 没有在设置中找到打开/关闭的路径 | 此界面应该是被隐藏了,用户无法自主找到 |
- Huawei mate10 pro - Android 8.0
| ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS | ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS |
|---|---|
| 不支持 | ![]() |
- Vivo X60 - Android11
| ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS | ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS |
|---|---|
| 不支持 | ![]() |
| 提示:android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS } | 跳转界面显示异常,手机厂商未开放(咕咚运动APP的此项设置是假的,实际并未设置成功) |
- Xiaomi MI10 - Android11
| ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS | ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS |
|---|---|
| 不支持 | ![]() |
| registerForActivityResult().result.resultCode 0,且不进行界面跳转 | 跳转界面显示异常,跳转路径不对,但是选择“无限制”后,电池优化会变成“不优化”,怀疑小米对两者进行了关联绑定 |
下图是手动到设置app中设置的路径:

参考连接:
OnActivityResult method is deprecated, what is the alternative?
本文展示了在Android应用中请求电池优化的代码实现,分别在不同型号手机如Samsung Galaxy S7、Xiaomi note3、Huawei mate10 pro、Vivo X60和Xiaomi MI10上进行了真机测试,运行在Android 7.0至11的系统版本。文中提及AndroidManifest.xml中申请相应权限,并讨论了Activity中相关实现。同时提到了OnActivityResult方法的弃用及其替代方案。







9766

被折叠的 条评论
为什么被折叠?



