Вот мой код:
String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";
AssetManager mgr = getAssets();
try {
String list[] = mgr.list(path);
Log.e("FILES", String.valueOf(list.length));
if (list != null)
for (int i=0; i<list.length; ++i)
{
Log.e("FILE:", path +"/"+ list[i]);
}
} catch (IOException e) {
Log.v("List error:", "can't list" + path);
}
Тем не менее, хотя у меня есть файлы в этом каталоге, он возвращает мне list.length = 0 ... какие-нибудь идеи?
can't play video error
. Вам нужно перейти на свой мобильный телефон.settings --> apps --> your app --> permissions --> enable storage.
Если вы столкнулись с этой ошибкой, сделайте это вручную. Убедитесь, что<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
в вашем манифесте. Для людей, которые сталкиваютсяNullPointerException
- вы пытаетесь получить доступ к файлам во внутреннем хранилище приложения, которые являются частными, извините, что вы не можете этого сделать.Я только что обнаружил, что:
new File("/sdcard/").listFiles()
возвращает null, если у вас нет:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
установить в вашем файле AndroidManifest.xml.
источник
Ну,
AssetManager
списки файлов вassets
папке, которая находится внутри вашего файла APK. Итак, в приведенном выше примере вы пытаетесь указать [apk] / assets / sdcard / Pictures.Если вы поместите несколько изображений в
assets
папку внутри вашего приложения, и они будут вPictures
каталоге, вы сделаетеmgr.list("/Pictures/")
.С другой стороны, если у вас есть файлы на SD-карте, которые находятся за пределами вашего файла APK, в
Pictures
папке, вы должны использоватьFile
так:И соответствующие ссылки из документов:
File
Asset Manager
источник
В дополнение ко всем приведенным выше ответам:
Если вы используете Android 6.0+ (уровень API 23+), вы должны явно запросить разрешение на доступ к внешнему хранилищу. Просто имея
в вашем манифесте будет недостаточно. Вы также активно запрашивали разрешение в своей деятельности:
Я рекомендую прочитать это: http://developer.android.com/training/permissions/requesting.html#perm-request
источник
Ваш
path
не находится в папке с ресурсами. Вы либо перечисляете файлы в папке с активами с помощью,AssetManager.list()
либо перечисляете файлы на SD-карте с помощьюFile.list()
источник
или
источник
Попробуй это:
источник
Могут произойти две вещи:
READ_EXTERNAL_STORAGE
разрешение наAndroidManifest.xml
источник
Попробуйте эти
источник
Если вы используете Android 10 / Q и сделали все правильно, чтобы запросить разрешения на доступ для чтения внешнего хранилища, но оно по-прежнему не работает, стоит прочитать этот ответ:
Android Q (10) запрашивает разрешение на доступ ко всему хранилищу. Ограниченное хранилище
У меня был рабочий код, но мое устройство взяло на себя обновление, когда оно было подключено к сети (обычно оно было без подключения). В Android 10 доступ к файлам больше не работал. Единственный простой способ исправить это, не переписывая код, - это добавить этот дополнительный атрибут в манифест, как описано. Доступ к файлам теперь снова работает как в Android 9. YMMV, вероятно, он не будет работать в будущих версиях.
источник