2016-08-29 27 views
2

您好,我正在刪除SD卡中的一些項目。在棒棒糖第一次我要求許可和用戶授予許可,但現在我不想每次都要求許可。它非常惱人,很多人因爲這種行爲而害怕。我怎樣才能挽救我的許可,即下一次我不需要再次傳遞意圖,並再次Lollipop及以上版本只獲得一次sdcard窗口權限

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); 

謝謝

+0

檢查這個答案將幫助您:http://stackoverflow.com/questions/37725699/issues-in-writing-files-to-sd-card-in-android-api-23marshmallow/37725902# 37725902 – Vickyexpert

回答

1

我給你一些代碼示例。請記住,您需要Android 6.0的檢查權限。 OnRequestPermission是一種方法,當你有權限的時候會在grantResult中做代碼,如果沒有,你可以請求許可或者說用戶沒有給予許可的消息。這種方法保存狀態的許可

@TargetApi(23) 
public void checkStoragePermission() { 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
     if (settingsDrawerFragment != null) { 
      settingsDrawerFragment.onPermissionGranted(); 
     } 
     return; 
    } 
    if (this.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager 
      .PERMISSION_GRANTED) { 
     requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
       REQUEST_CODE_EXTERNAL_STORAGE); 
     return; 
    } 
    if (settingsDrawerFragment != null) { 
     settingsDrawerFragment.onPermissionGranted(); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] 
     grantResults) { 
    switch (requestCode) { 
     case REQUEST_CODE_AUDIO_RECORD: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       startBrowseActivity(); 
      } else { 
       Utils.showToast(this, getString(R.string.audio_permission_denied)); 
      } 
      break; 
     case REQUEST_CODE_EXTERNAL_STORAGE: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       if (settingsDrawerFragment != null) { 
        settingsDrawerFragment.onPermissionGranted(); 
       } 
      } else { 
       if (settingsDrawerFragment != null) { 
        closeSettingsDrawer(); 
       } 
       Utils.showToast(this, getString(R.string.storage_permission_denied)); 
      } 
      break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
      break; 
    } 
} 
+0

你知道這個意圖intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);我想這個權限,以避免 –

+0

檢查此 http://stackoverflow.com/questions/26744842/how-to-use-the-new-sd-card-access-api-presented-for-lollipop 也如果你有onrequestPermissionsResult方法 - 這節省了應用程序的許可 – Genehme

+0

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); \t \t \t \t intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE,true); \t \t \t intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); \t \t \t intent.putExtra(Intent.EXTRA_LOCAL_ONLY,true); \t \t \t intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); \t \t \t intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); \t \t startActivityForResult(intent,42); \t \t builder.dismiss(); –

1

您可以使用下面的代碼來堅持許可

getContentResolver().takePersistableUriPermission(treeUri, 
      Intent.FLAG_GRANT_READ_URI_PERMISSION | 
      Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 

而且一旦你堅持下去的權限保存URI的sharedPreference,讓您可以在以後刪除文件,而無需確認。

+0

我在sharedPreference中保存了uri,但在電話重新啓動後再次出現此問題 –

+0

您確定您使用上述代碼來保留權限 –

+0

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); \t \t \t \t intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE,true); \t \t \t intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); \t \t \t intent.putExtra(Intent.EXTRA_LOCAL_ONLY,true); \t \t \t intent.addFlags(Intent。FLAG_GRANT_READ_URI_PERMISSION); \t \t \t intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); \t \t startActivityForResult(intent,42); \t \t builder.dismiss(); –

0

您可以通過添加鐮刀來啓動您的意圖。

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); 
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | 
         Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
startActivity(intent); 
+0

這是什麼不同於我的回答 –

+0

什麼是下一步sohail就像我在現有的代碼中添加此代碼請採取我的代碼與其他用戶的意見寫在 –

+0

我認爲你不能刪除文件使用這種'意圖.ACTION_OPEN_DOCUMENT_TREE'意圖。 –