2016-09-21 72 views
0

我試圖設置我的應用程序以使用運行時權限。我的請求對話框顯示正常,但是當我在對話框中選擇「接受」,並調用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 

我甚至不能找出2將在grantResults表示; PackageManager文檔中值爲2的唯一常量是COMPONENT_ENABLED_STATE_DISABLED和GET_RECEIVERS。

這到底是怎麼回事?

+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_DOCUMENTSProtection level: signature,這意味着This permission cannot be granted to third-party apps.看到documentation for MANAGE_DOCUMENTS

由於您的第一個要求是MANAGE_DOCUMENTS,難怪grantResults中的第一個值不是PackageManager.PERMISSION_GRANTED。我要猜測第二個值實際上是PERMISSION_GRANTED對應的Manifest.permission.READ_EXTERNAL_STORAGE請求。

長話短說,擺脫了MANAGE_DOCUMENTS請求:

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

那麼......第一個問題是尷尬...... – Brad

+0

所以它現在似乎工作。謝謝。 – Brad

+0

哈哈沒問題。很高興它的工作! –