Oto mój dotychczasowy kod:
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);
}
Ale chociaż mam pliki w tym katalogu, zwraca mi list.length = 0 ... jakieś pomysły?
can't play video error
. Musisz przejść do telefonu komórkowego.settings --> apps --> your app --> permissions --> enable storage.
Należy to zrobić ręcznie, jeśli napotkasz ten błąd. Upewnij się, że masz<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
w swoim manifeście. Dla osób, które mają do czynieniaNullPointerException
- próbujesz uzyskać dostęp do plików w pamięci wewnętrznej aplikacji, które są prywatne, przepraszam, że nie możesz tego zrobić.Właśnie odkryłem, że:
new File("/sdcard/").listFiles()
zwraca wartość null, jeśli nie masz:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
w pliku AndroidManifest.xml.
źródło
Cóż,
AssetManager
lista plików wassets
folderze znajdującym się w pliku APK. Więc to, co próbujesz wymienić w powyższym przykładzie, to [apk] / asset / sdcard / Pictures.Jeśli umieścisz zdjęcia w
assets
folderze wewnątrz aplikacji i znajdują się one wPictures
katalogu, zrobisz tomgr.list("/Pictures/")
.Z drugiej strony, jeśli masz pliki na karcie SD, które znajdują się poza plikiem APK, w
Pictures
folderze, użyjesz w tenFile
sposób:I odpowiednie linki z dokumentacji: Menedżer zasobów
plików
źródło
Oprócz wszystkich powyższych odpowiedzi:
Jeśli używasz Androida 6.0+ (poziom API 23+), musisz wyraźnie poprosić o pozwolenie na dostęp do zewnętrznej pamięci. Po prostu mając
w twoim manifeście nie wystarczy. Aktywnie poprosiłeś również o pozwolenie w swojej działalności:
Polecam przeczytanie tego: http://developer.android.com/training/permissions/requesting.html#perm-request
źródło
Twój
path
nie znajduje się w folderze zasobów. Albo wyliczasz pliki w folderze zasobów za pomocąAssetManager.list()
lub wyliczasz pliki na karcie SD za pomocąFile.list()
źródło
lub
źródło
Spróbuj tego:
źródło
Mogą się wydarzyć dwie rzeczy:
READ_EXTERNAL_STORAGE
uprawnień do swojegoAndroidManifest.xml
źródło
Spróbuj tych
źródło
Jeśli korzystasz z Androida 10 / Q i wykonałeś wszystkie poprawne czynności, aby zażądać uprawnień dostępu do odczytu pamięci zewnętrznej, a nadal nie działa, warto przeczytać tę odpowiedź:
Android Q (10) prosi o pozwolenie na dostęp do całej pamięci. Zakres przechowywania
Miałem działający kod, ale moje urządzenie samo zaktualizowało się, gdy było połączone z siecią (zwykle było to bez połączenia). W Androidzie 10 dostęp do pliku już nie działał. Jedynym łatwym sposobem naprawienia tego bez przepisywania kodu było dodanie tego dodatkowego atrybutu do manifestu zgodnie z opisem. Dostęp do plików działa teraz jak w systemie Android 9. YMMV, prawdopodobnie nie będzie działać w przyszłych wersjach.
źródło