DOZE模式三星设备

7

我正在测试一个在Android 6上的应用程序,需要通过DOZE,因此我想要请求用户接受忽略电池优化。

与项目中的AntiDoze相同,但当我在虚拟设备上运行时没有任何问题,但是当我切换到三星设备时,出现了以下问题:

FATAL EXCEPTION: main
         Process: com.commonsware.android.antidoze, PID: 21135
       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.commonsware.android.antidoze/com.commonsware.android.antidoze.EventDemoActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS dat=package:com.commonsware.android.antidoze }
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
      at android.app.ActivityThread.access$1100(ActivityThread.java:221)

你有什么想法来解决这个问题吗?

从链接中重要的代码如下:

if (Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1) {
  String pkg=getPackageName();
  PowerManager pm=getSystemService(PowerManager.class);

  if (!pm.isIgnoringBatteryOptimizations(pkg)) {
    Intent i=
      new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
        .setData(Uri.parse("package:"+pkg));

    startActivity(i);
  }
}

在清单文件中,我有以下内容:
 <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

我使用了几个不同的模拟器(API 23、25和26)进行测试,但是我得到了相同的异常。 - hamalaiv
1个回答

6

捕获ActivityNotFoundException并显示您自己的UI,要求用户转到设置应用程序并将您的应用程序添加到电池优化白名单中。尽管文档没有明确说明此Intent操作,但大多数Settings.ACTION_*值都提到“在某些情况下,可能不存在匹配的Activity,因此请确保防范此类情况”。


最接近的意图是什么,用于进入电池优化?除了转到操作系统的设置之外,是否有更好的备选方案? - android developer
@androiddeveloper:我不知道,抱歉。 - CommonsWare

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