Каким образом можно получить список файлов в директории?
Я добавил в AndroidManifest.xml разрешения:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Пытаюсь получить список файлов:
File dir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_MUSIC).getPath());
File f = new File(dir.toString());
File[] list = f.listFiles(); // Получаю null, хотя файлы и папки там есть
Сама же директория, при этом, возвращает true
на проверки .isDirectory()
и .exists()
.
При попытке сделать то же самое через NIO получаю AccessDeniedException
.
Скорее всего вы не запрашиваете разрешения в runtime...
Для запроса разрешений в runtime используйте следующий код:
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (shouldShowRequestPermissionRationale(
Manifest.permission.READ_EXTERNAL_STORAGE)) {
// Explain to the user why we need to read the contacts
}
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
// MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
// app-defined int constant that should be quite unique
return;
}
Код для обработки запроса на разрешения:
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
источник - https://developer.android.com/training/permissions/requesting.html
Важно: До Android 8.0 (API 26), если приложение запрашивало разрешение во время выполнения и разрешение было предоставлено, система также неправильно предоставляла приложению остальные разрешения, принадлежащие той же группе разрешений, которые были зарегистрированы в манифесте.
В Android 8.0, это поведение было исправлено. Приложение получает только разрешения, которые были запрошенны явно. Однако, как только пользователь предоставляет разрешение приложению, все последующие запросы на разрешения, относящиеся к той же группе разрешений, предоставляются автоматически.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
На бэке есть Spring-@RestController, который по URL "
Задача написать класс, который в конструкторе будет принимать имя файла, если файл с расширениемtxt, то создавать объект FileInputStream, если нет...
Наткнулся на решение этой проблемы через Cursor, но насколько я понимаю, его состояние нужно обновлять принудительно, тк