ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 啥都不做
Posted
技术标签:
【中文标题】ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 啥都不做【英文标题】:ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS does nothingACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 什么都不做 【发布时间】:2019-03-08 03:18:57 【问题描述】:我不是说什么都没发生。弹出对话框:
“让应用程序始终在后台运行? 允许/拒绝
但是,如果我进入设置、应用、电池优化,我的应用仍然设置为“优化电池使用”。然后我可以手动将其切换为“不优化”,但根据此处的文档和所有其他问题,使用 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 意图并单击允许,应该会更改此设置。
我正在使用:
另外,这个应用程序是用于研究的,不会上架,所以我不担心 Play 商店的政策。
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);
我正在使用上面的代码。它触发,弹出一个对话框“让应用程序始终在后台运行?”我按允许。
我的问题是按下“允许”实际上是做什么的,因为如果您随后进入应用设置并查看电池优化,设置会显示应用仍在“优化电池使用”。
所以看起来上面的意图,然后按允许,实际上并没有做任何事情。
【问题讨论】:
不清楚您的问题是什么。您可能还想发布minimal reproducible example,以便我们可以看到您如何设置Intent
(尤其是Uri
,此特定Intent
操作需要包含在其中)。
经过进一步检查,重启手机后似乎变为“未优化”。我尝试了强制关闭设置,但这并没有改变任何东西,它似乎只有在关闭并再次打开手机后才会改变。
我在另一个 question 上发布了一个解决方法
【参考方案1】:
我将您的代码放入一个废弃项目中,将android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
权限添加到清单中,在 Google Pixel (Android 9.0) 上运行它,一切都按预期运行。无需重启。
所以,要么:
您的问题仅出现在 Android 8.1 或更早的设备上,并且反映了他们在 9.0 中修复的平台错误,或者
您的问题与某些制造商的某些设备有关
我的猜测是后者,但您需要进行更广泛的测试才能确定这一点。
【讨论】:
我在 android 9 上使用 Pixel XL。当你说一切都按预期工作时,这是否意味着在运行项目后,如果你转到设置 -> 应用程序 -> 项目 -> 高级 -> 电池,它说“未优化”? @GeordieWicks:正确。 好的,谢谢,这只是我猜想的那些奇怪的 Android 东西之一。我的感觉是它必须工作,设置应用程序只是没有动态更新。 @GeordieWicks 我在 Pixel 2、api 级别 28 上尝试过,我看到的行为与您看到的相同。在我重新启动之前,设置页面中的权限不会改变。 但是,我只是在点击接受按钮之前和之后尝试使用“adb shell dumpsys deviceidle”。点击接受后,我的应用程序包立即列在“白名单用户应用程序:”部分,并且应用程序ID列在“白名单(空闲除外)所有应用程序ID:”,“白名单用户应用程序ID”和“白名单所有应用程序 ID”部分。以上是关于ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 啥都不做的主要内容,如果未能解决你的问题,请参考以下文章