Android M startActivity电池优化

时间:2017-01-11 16:57:42

标签: android android-intent optimization battery

我正在开发一款应该在靠近某个地方时提醒用户的应用。 当然,如果手机处于闲置状态,也必须这样做。 有了DOZE,我现在明白我必须将我的应用程序列入白名单,为此,我看到我可以通过动作请求启动一个意图,感谢Buddy在this post中的回答

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

这应该太容易了......因为谷歌不喜欢这种方法,如果你这样做,你的应用程序应该被禁止进入游戏商店......没有评论...... 好的方法应该是驱动用户使用电池设置并手动将你的应用程序添加到DOZE的白名单中...是的,这应该是一个很大的攀爬墙...无论如何似乎是唯一的方式......现在答案是: 我可以使用意图以这种方式(thank you Chris):

转到电源使用情况摘要
Intent powerUsageIntent = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY);
    ResolveInfo resolveInfo = getPackageManager().resolveActivity(powerUsageIntent, 0);
// check that the Battery app exists on this device
    if(resolveInfo != null){
        startActivity(powerUsageIntent);
    }  

但如何直接进入应用列表选择电池优化?

感谢您的回答。

3 个答案:

答案 0 :(得分:10)

要打开用于选择电池优化的应用列表,您可以使用以下代码示例:

private void openPowerSettings(Context context) {
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
    context.startActivity(intent);
}

它不需要<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>权限,因此可以将其发布到Google Play(有关详细信息,请查看this主题并对此问题发表评论。)

注意

添加此行

intent.setData(Uri.parse("package:" + mContext.getPackageName()));

将导致崩溃&#34;致命异常:android.content.ActivityNotFoundException未找到任何活动来处理Intent {act = android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS dat = package:io.demo.example}&#34;。用户必须在列表中找到应用程序,似乎无法直接跳转到我们的应用程序。

答案 1 :(得分:1)

这是我使用的:

清单:

message RootMessage {
  oneof test_oneof {
     Foo foo = 1;
     Bar bar = 2;
  }
}
Any

示例:

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

答案 2 :(得分:0)

请尝试以下代码打开“忽略电池优化设置”页面。

private void openPowerSettings() {
    startActivityForResult(new Intent(android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS), 0);
}

无需向清单文件添加额外的权限。