Voici mon code pour l'instant:
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);
}
Pourtant, même si j'ai des fichiers dans ce répertoire, cela me renvoie list.length = 0 ... des idées?
can't play video error
. Vous devez vous rendre sur votre mobile. Voussettings --> apps --> your app --> permissions --> enable storage.
devez le faire manuellement si vous rencontrez cette erreur. Assurez-vous que vous avez<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
dans votre manifeste. Pour les personnes confrontéesNullPointerException
, vous essayez d'accéder aux fichiers du stockage interne de l'application qui sont privés, désolé, vous ne pouvez pas faire cela.Je viens de découvrir que:
new File("/sdcard/").listFiles()
renvoie null si vous n'avez pas:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
défini dans votre fichier AndroidManifest.xml.
la source
Eh bien, la
AssetManager
liste des fichiers dans leassets
dossier qui se trouve à l'intérieur de votre fichier APK. Donc, ce que vous essayez de lister dans votre exemple ci-dessus est [apk] / assets / sdcard / Pictures.Si vous mettez des images dans le
assets
dossier à l'intérieur de votre application et qu'elles se trouvent dans lePictures
répertoire, vous le feriezmgr.list("/Pictures/")
.D'un autre côté, si vous avez des fichiers sur la carte SD qui sont en dehors de votre fichier APK, dans le
Pictures
dossier, alors vous utiliseriezFile
comme ceci:Et des liens pertinents de la documentation:
File
Asset Manager
la source
En plus de toutes les réponses ci-dessus:
Si vous utilisez Android 6.0+ (niveau API 23+), vous devez explicitement demander l'autorisation d'accéder au stockage externe. Avoir simplement
dans votre manifeste ne suffira pas. Vous avez également activement demandé l'autorisation dans votre activité:
Je recommande de lire ceci: http://developer.android.com/training/permissions/requesting.html#perm-request
la source
Votre
path
n'est pas dans le dossier des actifs. Soit vous énumérez les fichiers dans le dossier des ressources au moyen de,AssetManager.list()
soit vous énumérez les fichiers sur votre carte SD au moyen deFile.list()
la source
ou
la source
Essaye ça:
la source
Il y a deux choses qui pourraient se produire:
READ_EXTERNAL_STORAGE
permission à votreAndroidManifest.xml
la source
Essayez ces
la source
Si vous êtes sur Android 10 / Q et que vous avez fait toutes les bonnes choses pour demander des autorisations d'accès pour lire le stockage externe et que cela ne fonctionne toujours pas, il vaut la peine de lire cette réponse:
Android Q (10) demande la permission d'accéder à tout le stockage. Stockage étendu
J'avais un code de travail, mais mon appareil a pris sur lui de se mettre à jour lorsqu'il était sur une connexion réseau (il était généralement sans connexion.) Une fois dans Android 10, l'accès aux fichiers ne fonctionnait plus. Le seul moyen simple de le réparer sans réécrire le code était d'ajouter cet attribut supplémentaire au manifeste comme décrit. L'accès aux fichiers fonctionne à nouveau comme dans Android 9. YMMV, il ne continuera probablement pas à fonctionner dans les versions futures.
la source