如何正确触发ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS意图?

A.S*_*.SD 31 optimization android android-intent android-6.0-marshmallow android-doze

如文档中所述:

"An app holding the REQUEST_IGNORE_BATTERY_OPTIMIZATIONS permission can trigger a system dialog to let the user add the app to the whitelist directly, without going to settings. The app fires a ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent to trigger the dialog."

Can someone tell me the proper way to fire this intent?

Bud*_*ddy 44

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);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此答案.

  • 请注意这一点 - 我的应用程序刚从Google Play暂停,恕不另行通知请求"REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",即使免除应用程序电池优化对我的应用程序的功能至关重要,我也不能出于技术原因使用GCM. (19认同)
  • 只有在AndroidManifest.xml中有<uses-permission android:name ="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>时才会触发 (11认同)
  • @milosmns他们决定恢复我的应用程序的唯一方法是,如果我删除了"REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"权限,即使我根据文档解释了我有权要求它.我决定删除它,以便我不会冒险永久删除应用程序.对于暂停和永久禁止Google Play上的应用程序,谷歌似乎非常高兴和无情. (10认同)
  • @EladNava谢谢!据我了解,如果*不*在清单中声明这一点,将用户直接引导到退出页面(通过使用此操作和应用程序ID作为数据调用startActivity())是安全的. (4认同)
  • 感谢您的回复.....我真的不明白....我不知道为什么谷歌突然像苹果一样:(。如果他们明确说明哪些应用程序可以被列入白名单,哪些是可以接受的不是,如果匹配的话问题出在哪里? (2认同)
  • @behelit在您的应用中要求获得此权限之前,我会尝试获得Google对您的用例的书面批准.不确定他们是否有这样的过程,但试图与他们取得联系,以避免意外停止. (2认同)
  • @Alin我最终删除了许可.我手动指导抱怨该应用无法将应用从电池优化列入白名单的用户. (2认同)
  • 如果已经应用忽略了BatteryOptimization,什么“intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);” 是为了?为什么需要打开设置页面? (2认同)
  • @auval是的,这是正确的.谷歌只针对应用程序,允许用户通过应用程序内对话框在应用程序内*将电池优化列入白名单.将用户带到电池优化页面就可以了. (2认同)

Jam*_*mil 8

为了避免从Google Play商店暂停,最好将用户带到电池优化设置,以便手动将应用程序添加到白名单

Intent myIntent = new Intent();
myIntent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)

它也不需要

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
Run Code Online (Sandbox Code Playgroud)

清单文件中的权限

  • 没有权限,startActivity()不会做任何事情 (4认同)
  • 同时,有趣的是,您可以通过 ActionIgnoreBatteryOptimizationSettings 将用户带到一个页面,以查看您是否未优化。我只想进入已优化的页面,以便我可以禁用它 (2认同)
  • 无需权限即可完美运行。仅“ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS”需要该权限。如果它不起作用,请检查您是否没有将“setData”行添加到意图中。意图应该只有一个操作,如本答案所示。 (2认同)