我使用以下代码请求忽略应用程序的电池优化。我可以成功请求权限。我能够使用isIgnoringBatteryOptimizations()检测该应用程序是否在系统的白名单上。
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName))
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
else
{
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
}
context.startActivity(intent);
我可以看到一个对话框,类似于"让应用程序始终在后台运行?",我单击"是"。我以为它会将我的应用程序添加到系统电池优化白名单中。
这是我的问题。文档提到用户可以在电池>优化设置>手动配置列表。所以我希望一旦我请求并授予权限,我就可以在系统设置中看到它,并且我应该能够手动删除它。但我什么也看不见。我看不到请求与系统设置中的列表之间有任何关系。
它们是否共享同一个列表?如果它们不同,它们是否等效?
所以我希望一旦我请求并授予权限,我就可以在系统设置中看到它
实际上,事实并非如此。文档(https://developer.android.com/training/monitoring-device-state/doze-standby#support_for_other_use_cases)说:
拥有REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限的应用可以触发系统对话框,让用户直接将应用添加到白名单,而无需转到设置。应用会触发ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS意图以触发对话框。
它只是启动对话框的权限。应用不会自动列入白名单。用户必须将其显式添加到列表中的任何方式。
它们是否共享同一个列表?如果它们不同,它们是否等效?
只有一个列表。