2016-09-21 22 views
0

実行時アクセス許可を使用するようにアプリケーションを設定しようとしています。要求ダイアログに問題はないが、ダイアログで "Accept"を選択すると、onRequestPermissionsResultが呼び出され、grantResultsはPERMISSION_GRANTEDを表示せず、アプリケーションはアクセス権を取得しない。ここで私は許可を要求しています方法です:Androidの実行時のアクセス許可 - ユーザーがアクセス許可を許可し、それをonRequestPermissionsResultで受信しない

ActivityCompat.requestPermissions((Activity) contnext, 
    new String[]{Manifest.permission.MANAGE_DOCUMENTS, Manifest.permission.READ_EXTERNAL_STORAGE}, 
    MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 

とコールバック:

public void onRequestPermissionsResult(int requestCode, 
    String permissions[], int[] grantResults) { 
    switch (requestCode){ 
     case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // do good stuff 
       Log.i("net.bradmont.prayson", "Permissions granted by user"); 
      } else { 
       Log.i("net.bradmont.prayson", "Permissions refused by user"); 
       Log.i("net.bradmont.prayson", "grantResults.length " + grantResults.length); 
       for (int i = 0; i < grantResults.length; i++){ 
       Log.i("net.bradmont.prayson", "grantResults[" + i +"]" + grantResults.length); 
       } 
       Snackbar snackbar1 = Snackbar.make(mCoordinator, 
         R.string.cant_open_file_no_permission, Snackbar.LENGTH_LONG); 
       snackbar1.show(); 
      } 

    } 
} 

結果は、権限ダイアログを受け入れた後、アプリがエラースナックバーを示すことです。 logcatに表示される内容は次のとおりです。

net.bradmont.prayson I Permissions refused by user 
         I grantResults.length 2 
         I grantResults[0]2 
         I grantResults[1]2 

grantResultsには2つの意味があります。 PackageManagerのドキュメントでCOMPONENT_ENABLED_STATE_DISABLEDとGET_RECEIVERSの値が2のconstのみが使用されます。

ここでは何が起こっていますか?

+2

かいつまんでは、MANAGE_DOCUMENTS要求を取り除きます。 – CommonsWare

答えて

1

最初に、数値の代わりにループ内に長さint[] grantResultsを何度も繰り返し印刷しています。

for (int i = 0; i < grantResults.length; i++){ 
     Log.i("net.bradmont.prayson", "grantResults[" + i +"]" + grantResults.length); 
} 

にすべきである:第二

for (int i = 0; i < grantResults.length; i++){ 
     Log.i("net.bradmont.prayson", "grantResults[" + i +"]" + grantResults[i]); 
} 

、CommonsWareはManifest.permission.MANAGE_DOCUMENTSを述べたようThis permission cannot be granted to third-party apps.documentation for MANAGE_DOCUMENTS参照意味し、Protection level: signatureあります。

最初のリクエストはMANAGE_DOCUMENTSなので、grantResultsの最初の値はPackageManager.PERMISSION_GRANTEDではありません。私は、第2の値がManifest.permission.READ_EXTERNAL_STORAGEリクエストに対応する実際にはPERMISSION_GRANTEDであると推測します。とにかくその権限を保持することはできませんので、 - - と何が起こるか見MANAGE_DOCUMENTS` `取り除く

ActivityCompat.requestPermissions((Activity) context, 
    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
    MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 
+0

まあ...その最初の問題は恥ずかしいです... – Brad

+0

それは今働いているようです。ありがとうございました。 – Brad

+0

は問題ありません。それがうれしい! –

関連する問題