ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS不起作用。

5
我不是说什么都没发生。弹出对话框: “始终在后台运行应用程序? 允许/拒绝” 但是,如果我进入设置、应用程序、电池优化,我的应用程序仍然被设置为“优化电池使用”。然后我可以手动将其切换到“不优化”,但是根据文档和所有其他问题,在这里使用ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS意图并单击允许,应更改此设置。 我正在使用: 此外,这个应用程序是用于研究,并不会进入商店,所以我不担心Play Store政策。
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);
        }
    }

我正在使用上述代码。它触发并弹出一个对话框,询问“是否始终允许应用在后台运行?” 我点击允许。
我的问题是,点击“允许”实际上会做什么,因为如果您进入应用程序设置并查看电池优化,设置显示该应用程序仍在“优化电池使用”。
因此,似乎上述意图和点击Allow实际上没有任何作用。

不清楚你的问题是什么。你可能还想发布一个 [mcve],这样我们就可以看到你如何设置“Intent”(特别是需要包含它才能使此特定“Intent”操作起作用的“Uri”)。 - CommonsWare
经进一步检查,似乎在重新启动手机后,它会变成“未优化”。我尝试强制关闭设置,但这并没有改变任何东西,只有在再次开关机后才会发生变化。 - Geordie Wicks
我制作了一个解决方案并在另一个问题中发布了。 - Edgar
1个回答

0

我将您的代码放入一个临时项目中,在清单文件中添加了android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限,然后在Google Pixel(Android 9.0)上运行,一切都按预期工作。无需重新启动。

所以,要么:

  • 您的问题仅出现在Android 8.1或更早版本的设备上,并反映了他们在9.0中修复的平台错误,或者

  • 您的问题与某些制造商的某些设备有关

我猜是后者,但您需要进行更广泛的测试来确定。


我正在使用安卓9上的Pixel XL。当你说一切都按预期工作时,是否意味着在运行项目后,如果你进入设置->应用程序->项目->高级->电池,它会显示“未优化”? - Geordie Wicks
@GeordieWicks:没错。 - CommonsWare
好的,谢谢。我猜这只是 Android 的一些奇怪问题。我的感觉是它应该是在工作的,只是设置应用程序没有动态更新。 - Geordie Wicks
1
@GeordieWicks 我在我的Pixel 2上尝试了一下,API级别为28,我看到了你看到的相同行为。在设置页面中的权限直到重新启动后才会更改。 - James Moore
然而,我刚刚尝试在点击接受按钮之前和之后使用“adb shell dumpsys deviceidle”。在点击接受后,我的应用程序包立即出现在“白名单用户应用程序:”部分中,并且应用程序ID列在“白名单(除空闲)所有应用程序ID:”,“白名单用户应用程序ID”和“白名单所有应用程序ID”部分中。 - James Moore
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接