2016-02-04 81 views
7

我遇到了一些與Android權限有關的問題。問題是每次onRequestPermissionsResult被調用時,即使用戶已經說過「永遠不會再問」,onResume也會被調用。爲什麼在onRequestPermissionsResult之後調用onResume?

一個例子:

@Override 
    public void onResume() { 
    super.onResume(); 
    startLocationProvider(); 
    } 

    private void startLocationProvider() { 
    if (!locationService.requestLocationPermission(this, 0)) { 
     return; 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == 0) { 
     if (grantResults.length == 1 && grantResults[ 0 ] == PackageManager.PERMISSION_GRANTED) { 
     startLocationProvider(); 
     } 
    } 

它正常工作,直到用戶選擇「不再詢問」和否認。我不知道爲什麼onResume被一次又一次地調用,儘管沒有向用戶顯示對話框。

+0

onResume在onRequestPermissionResult之後調用,以允許您的活動考慮用戶選擇(授予或拒絕的權限)並相應地執行代碼。但現在真正的問題是,爲什麼當用戶選中「永不再問」並拒絕一個許可時,onRequestPermissionsResult被無限期調用?如果你發現了什麼,請讓我知道! –

+0

嘗試將代碼移出onResume並放入onStart。 –

回答

1

在檢查權限後,您需要使用shouldShowRequestPermissionRationale作爲條件檢查的一部分。

onResume被調用以允許您對該權限檢查的結果進行採樣。

下面是一個什麼剪斷我爲一個項目,我的工作的:

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    if (grantResults.length > 0) { 
     if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // Permission Granted 
      pickDownloadFolder(); 
     } else if (grantResults[0] == PackageManager.PERMISSION_DENIED) { 
      // Permission Denied 
      if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
        Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
       result = "PERMISSION_DENIED"; 
       Intent returnIntent = new Intent(); 
       returnIntent.putExtra(resultKey, result); 
       setResult(RESULT_CANCELED, returnIntent); 
       finish(); 
      } else { 
       result = "PERMISSION_DENIED_FORCED"; 
       Intent returnIntent = new Intent(); 
       returnIntent.putExtra(resultKey, result); 
       setResult(RESULT_CANCELED, returnIntent); 
       finish(); 
      } 
     } 
    } 
} 
1

您是否嘗試過移動您的許可請求的OnStart代替的onResume?

相關問題