Android 我如何正确地触发动作\u请求\u忽略\u电池\u优化意图?

Android 我如何正确地触发动作\u请求\u忽略\u电池\u优化意图?,android,android-intent,optimization,android-6.0-marshmallow,android-doze,Android,Android Intent,Optimization,Android 6.0 Marshmallow,Android Doze,如文件所述: “持有请求\忽略\电池\优化权限的应用程序可以触发一个系统对话框,允许用户直接将该应用程序添加到白名单,而无需进入设置。该应用程序触发一个操作\请求\忽略\电池\优化以触发该对话框。” 有人能告诉我激发这种意图的正确方法吗 Intent intent = new Intent(); String packageName = context.getPackageName(); PowerManager pm = (PowerManager) context.getSystemServ

如文件所述:

“持有请求\忽略\电池\优化权限的应用程序可以触发一个系统对话框,允许用户直接将该应用程序添加到白名单,而无需进入设置。该应用程序触发一个操作\请求\忽略\电池\优化以触发该对话框。”

有人能告诉我激发这种意图的正确方法吗

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);

有关更多信息,请参阅。

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

Intent myIntent = new Intent();
myIntent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
startActivity(myIntent);
而且它不需要有

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>


清单文件中的权限

小心-我的应用程序刚刚被Google Play暂停,没有事先通知请求
请求\u忽略\u电池\u优化
,即使免除电池优化对我的应用程序的功能至关重要,由于技术原因,我不能使用GCM。@milosmns他们决定恢复我的应用程序的唯一方法是删除
请求\u忽略\u电池\u优化
权限,尽管我解释说根据文档,我完全有权请求。我决定删除它,这样我就不会冒永久删除应用程序的风险。谷歌似乎对暂停和永久禁止谷歌Play上的应用程序非常高兴,也没有感情。这只会在你的AndroidManifest中出现时触发。xml@Alin我最终取消了许可。我手动指导那些抱怨应用程序不工作的用户将应用程序从电池优化中列入白名单。@EladNava谢谢!据我所知,如果不在清单中声明,将用户直接引导到选择退出页面(使用此操作和应用程序id作为数据调用startActivity())是安全的不做任何事情我同意@KgaboL的观点,即如果清单中缺少android.permission.REQUEST\u IGNORE\u BATTERY\u优化,则使用操作设置启动活动。操作\u IGNORE\u BATTERY\u优化设置没有任何作用。但是,我确实希望将用户带到页面,让他们手动打开。同时,您可以通过ActionIgnoreBatteryOptimizationSettings将用户带到页面,以查看您是否处于未优化状态,这似乎很有趣。我只想被带到我优化的页面,这样我就可以禁用它。只有代码的答案是不够的,请对你的代码提供一点解释。这没有意义。如果SDK Intent myIntent = new Intent(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { myIntent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); myIntent.setData(Uri.parse("package:" + getActivity().getPackageName())); } startActivity(myIntent);