Android - DOZE モードの Samsung デバイス


DOZE を渡す必要がある Android 6 でアプリをテストしています。そのため、バッテリーの最適化のために Igore を受け入れるようユーザーに求めたいと考えています。

プロジェクトと同様 AntiDoze ですが、仮想デバイスで実行すると問題はありませんが、Samsung に切り替えると次のようになります:

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.access00(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" />


------------に答える------------

ActivityNotFoundException 例外をキャッチし、独自の UI をユーザーに表示して、設定アプリに移動し、バッテリー最適化のホワイトリストにアプリを追加するように求めます。ドキュメントではこのインテント アクションについて具体的に述べられていませんが、ほとんどの Settings.ACTION_* 値は「場合によっては、一致するアクティビティが存在しない可能性があるため、必ず保護してください。そしてこれに反対する」.

タグ:

関連記事:

Apache ProxyPass は認証ヘッダーを削除します

c++ - call(Double X) を func2(double X) に #define する方法