Hier ist mein Code bisher:
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);
}
Obwohl ich Dateien in diesem Verzeichnis habe, gibt es mir list.length = 0 zurück ... irgendwelche Ideen?
can't play video error
. Sie müssen zu Ihrem Handy gehensettings --> apps --> your app --> permissions --> enable storage.
Sollte dies manuell tun, wenn Sie auf diesen Fehler stoßen. Stellen Sie sicher, dass Sie<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
in Ihrem Manifest haben. Für die Menschen, denenNullPointerException
Sie gegenüberstehen - Sie versuchen, auf die Dateien im internen Speicher der App zuzugreifen, die privat sind. Entschuldigung, das können Sie nicht.Ich habe gerade entdeckt, dass:
new File("/sdcard/").listFiles()
Gibt null zurück, wenn Sie nicht haben:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
in Ihrer AndroidManifest.xml-Datei festlegen.
quelle
Nun, die
AssetManager
Listen Dateien innerhalb derassets
Ordner, der sich in Ihrer APK-Datei befindet. Was Sie also in Ihrem obigen Beispiel auflisten möchten, ist [apk] / assets / sdcard / Pictures.Wenn Sie einige Bilder in den
assets
Ordner Ihrer Anwendung legen und sie sich imPictures
Verzeichnis befinden, würden Sie dies tunmgr.list("/Pictures/")
.Wenn Sie andererseits Dateien auf der SD-Karte außerhalb Ihrer APK-Datei im
Pictures
Ordner haben, würden Sie Folgendes verwendenFile
:Und relevante Links aus den Dokumenten:
File
Asset Manager
quelle
Zusätzlich zu allen obigen Antworten:
Wenn Sie mit Android 6.0+ (API Level 23+) arbeiten, müssen Sie explizit um Erlaubnis bitten, auf externen Speicher zugreifen zu dürfen. Einfach haben
in deinem Manifest wird nicht genug sein. Sie haben auch aktiv die Erlaubnis für Ihre Aktivität angefordert:
Ich empfehle dies zu lesen: http://developer.android.com/training/permissions/requesting.html#perm-request
quelle
Ihr
path
befindet sich nicht im Assets-Ordner. Entweder Sie zählen Dateien im Assets-Ordner mit aufAssetManager.list()
oder Sie zählen Dateien auf Ihrer SD-Karte mit aufFile.list()
quelle
oder
quelle
Versuche dies:
quelle
Es gibt zwei Dinge, die passieren könnten:
READ_EXTERNAL_STORAGE
Ihrer Berechtigung keine Berechtigung hinzuAndroidManifest.xml
quelle
Probiere diese
quelle
Wenn Sie mit Android 10 / Q arbeiten und die richtigen Schritte unternommen haben, um Zugriffsberechtigungen zum Lesen des externen Speichers anzufordern, und dies immer noch nicht funktioniert, sollten Sie diese Antwort lesen:
Android Q (10) bittet um Erlaubnis, auf den gesamten Speicher zugreifen zu dürfen. Speicherbereich
Ich hatte Arbeitscode, aber mein Gerät hat es auf sich genommen, es zu aktualisieren, wenn es über eine Netzwerkverbindung bestand (normalerweise ohne Verbindung). In Android 10 funktionierte der Dateizugriff nicht mehr. Die einzige einfache Möglichkeit, das Problem zu beheben, ohne den Code neu zu schreiben, bestand darin, das zusätzliche Attribut wie beschrieben zum Manifest hinzuzufügen. Der Dateizugriff funktioniert jetzt wieder wie in Android 9. YMMV, es wird wahrscheinlich in zukünftigen Versionen nicht mehr funktionieren.
quelle