2017-07-01 33 views
4

私はintentServiceタスクをフォアグラウンドモードにしていますが、アンドロイドM +ではDozeモードでタスクが停止します。アプリがホワイトリストに自分自身を設定しようとする意図がある場合は、私はGoogleの利用を禁止しています。しかし、私が許可を使用してGRANTまたはDENIEDをチェックすると、私は与えられた結果を得るが、何も起こらない。私はホワイトリストに私のアプリが表示されません。禁止されていないホワイトリストにアプリを追加するにはどうすればよいですか?REQUEST_IGNORE_BATTERY_OPTIMIZATIONSそれを正しく行う方法

if(Build.VERSION.SDK_INT>=23){ 
      int permissionCheck= ContextCompat 
        .checkSelfPermission(this, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); 

      if(permissionCheck == PackageManager.PERMISSION_DENIED){ 

       //Should we show an explanation 
       if(ActivityCompat.shouldShowRequestPermissionRationale 
         (this, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)){ 
        //Show an explanation 
        final String message = ""; 
       Snackbar.make(coordinatorLayoutView,message,Snackbar.LENGTH_LONG) 
          .setAction("GRANT", new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            ActivityCompat.requestPermissions(MainActivity.this, 
              new String[]{Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS},PERMISSION_REQUEST_CODE); 
           } 
          }) 
          .show(); 


       }else{ 
        //No explanation need,we can request the permission 
        ActivityCompat.requestPermissions(this, 
          new String[]{Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS},PERMISSION_REQUEST_CODE); 
       } 
      } 
     } 

答えて

7

REQUEST_IGNORE_BATTERY_OPTIMIZATIONSdangerousアクセス許可ではありません(私はマニフェストにパーミッションを追加しました)。あなたはそのコードのどれも必要としません。 the documentation for REQUEST_IGNORE_BATTERY_OPTIMIZATIONS引用:アプリケーションがACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSを使用するために保持しなければならない

許可。これは通常のアクセス許可です:アクセス権を要求するアプリケーションには、ユーザーが承認または表示する必要なく、アクセス許可が常に与えられます。

したがって、すべてのコードを削除してください。

私のアプリはホワイトリストには表示されません。

これは、明らかにユーザーがあなたをホワイトリストに追加しなかったためです。

要求中REQUEST_IGNORE_BATTERY_OPTIMIZATIONSは、セキュリティの観点から、an ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSIntentでアクティビティを開始する権限を与えます。 Uriようにアプリのパッケージを含めるようにしてください:

startActivity(new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, Uri.parse("package:"+getPackageName()))); 

ユーザーが、彼らはあなたのアプリケーションにDozeモードの影響の一部を一時停止して喜んでであることを示すことができ、画面が表示されます。

禁止なしでホワイトリストにアプリを追加するにはどうすればよいですか?

禁止したくない場合は、これを行わないでください。あなたのアプリに、an ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGSIntentでアクティビティを開始するものがありますか?これにより、ユーザーはアプリの全リストに移動し、ユーザーはホワイトリストにあるものとそうでないものを切り替えることができます。これには許可は必要ありません。

マニフェストにREQUEST_IGNORE_BATTERY_OPTIMIZATIONSを要求する行為は、what may get you bannedです。

+0

CommonsWare、詳細な回答ありがとうございます。それは私が許可を必要としない、意図を作成するだけであることを意味する?私は正しい? – Delphian

+1

@Delphian: 'ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS'を使いたい場合、あなたのアプリやホワイトリストに特有のページに直接誘導するには、マニフェストで' REQUEST_IGNORE_BATTERY_OPTIMIZATIONS'を要求する必要がありますが、実行時権限コードを使う必要はありませんそれのための。許可を避けたい場合は、代わりに 'ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS'を使用してください。 – CommonsWare

+0

CommonsWareありがとう! – Delphian

関連する問題