2

Здравствуйте, я удаляю некоторые элементы с SD-карты. И в леденец в первый раз я прошу разрешения и разрешения на предоставление прав, но теперь я не хочу каждый раз спрашивать разрешения. Его очень раздражает и многие парни, которых они боятся такого поведения. Как я могу сохранить мое разрешение т.е. следующий раз, когда я не нужно передать эту Intent снова и сноваПолучение только одного разрешения для окна sdcard на Lollipop и выше версии

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 - метод, который, когда u имеет разрешение, будет делать код в 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.ACTION_OPEN_DOCUMENT_TREE); Я хочу это разрешение, чтобы избежать –

+0

. Это http://stackoverflow.com/questions/26744842/how-to-use-the-new-sd-card-access-api-presented-for-lollipop также если u иметь 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 (намерение, 42); \t \t builder.dismiss(); –

1

Вы можете использовать следующий код упорствовать разрешения

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

Кроме того, после вы будете упорствовать разрешение сохранить Ури в sharedPreference, так что вы можете удалить файлы позже без подтверждения ,

+0

Я сохраняю этот uri в sharedPreference, но после перезагрузки телефона эта проблема возникает –

+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 (намерение, 42); \t \t builder.dismiss(); –

0

Вы можете начать свое намерение, добавив falgs.

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'. –