Я пытаюсь создать папку в корне внешней SD-карты (и позже поместить туда файлы, сгенерированные моим приложением).
Я прошу разрешения WRITE_EXTERNAL_STORAGE, но я думаю, что этого недостаточно для записи на внешнюю SD-карту.
Вот мой код:
private boolean authorized = false;
private final static int MY_PERMISSIONS_REQUEST_EXTERNAL_STORAGE = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
long debut = System.currentTimeMillis();
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
debut = System.currentTimeMillis();
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_EXTERNAL_STORAGE);
} else {
authorized = true;
}
while (!authorized) {
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
authorized = true;
} else if (System.currentTimeMillis() - debut >= 5000) {
this.finish();
System.exit(0);
}
}
//SDCARD path = "/storage/9016-4EF8"
new File("/storage/9016-4EF8"+"/MyApp").mkdirs();
}
Мой код работает на моем телефоне (Android 5.1), но не на моем планшете (Android 8.1). Похоже, у меня есть разрешение на чтение только в последних версиях Android. Как получить разрешение на запись на SD-карту?
Я использую приложение File Explorer, Xplore, и это приложение, похоже, запрашивает другое разрешение, прежде чем сможет изменять файлы на SD-карте:
"предоставить Xplore доступ к вашим данным, включая фотографии и видео, на SD-карте"
Как я могу запросить это разрешение (если это вообще возможно)?
ACTION_OPEN_DOCUMENT_TREE
) и позвольте пользователю выбирать, куда пойдет содержимое. - person CommonsWare   schedule 07.06.2019getExternalFilesDirs()
. Если это возвращает 2+ местоположения, все, кроме первого, будут на съемном носителе. Однако это не будет корнем съемного носителя. Если я где-нибудь сохраню возвращенный URI, сохранятся ли у меня права на запись? -- вы можете использоватьtakePersistableUriPermissions()
наContentResolver
дляUri
, который вы получаете от Storage Access Framework. - person CommonsWare   schedule 07.06.2019