Aquí está mi código hasta ahora:
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);
}
Sin embargo, aunque tengo archivos en ese directorio, me devuelve list.length = 0 ... ¿alguna idea?
can't play video error
. Necesita ir a su móvil.settings --> apps --> your app --> permissions --> enable storage.
Debe hacerlo manualmente si se enfrenta a este error. Asegúrese de tenerlo<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
en su manifiesto. Para las personas que se enfrentanNullPointerException
, está tratando de acceder a los archivos en el almacenamiento interno de la aplicación que son privados, lo siento, no puede hacerlo.Acabo de descubrir que:
new File("/sdcard/").listFiles()
devuelve nulo si no tiene:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
establecido en su archivo AndroidManifest.xml.
fuente
Bueno, las
AssetManager
listas de archivos dentro de laassets
carpeta que está dentro de su archivo APK. Entonces, lo que está tratando de enumerar en su ejemplo anterior es [apk] / assets / sdcard / Pictures.Si coloca algunas imágenes dentro de la
assets
carpeta dentro de su aplicación, y están en elPictures
directorio, lo haríamgr.list("/Pictures/")
.Por otro lado, si tiene archivos en la tarjeta sd que están fuera de su archivo APK, en la
Pictures
carpeta, entonces los usaríaFile
así:Y enlaces relevantes de los documentos:
File
Asset Manager
fuente
Además de todas las respuestas anteriores:
Si tiene Android 6.0+ (API nivel 23+), debe solicitar explícitamente permiso para acceder al almacenamiento externo. Simplemente teniendo
en tu manifiesto no será suficiente. También has solicitado activamente el permiso en tu actividad:
Recomiendo leer esto: http://developer.android.com/training/permissions/requesting.html#perm-request
fuente
Tu
path
no está dentro de la carpeta de activos. O enumera los archivos dentro de la carpeta de activos por medio deAssetManager.list()
o enumera los archivos en su tarjeta SD por medio deFile.list()
fuente
o
fuente
Prueba esto:
fuente
Hay dos cosas que podrían estar sucediendo:
READ_EXTERNAL_STORAGE
permiso a suAndroidManifest.xml
fuente
Prueba estos
fuente
Si tiene Android 10 / Q e hizo todo lo correcto para solicitar permisos de acceso para leer el almacenamiento externo y aún no funciona, vale la pena leer esta respuesta:
Android Q (10) pide permiso para acceder a todo el almacenamiento. Almacenamiento con alcance
Tenía un código que funcionaba, pero mi dispositivo se encargó de actualizarlo cuando estaba en una conexión de red (por lo general, sin conexión). Una vez en Android 10, el acceso al archivo ya no funcionaba. La única forma fácil de solucionarlo sin volver a escribir el código era agregar ese atributo adicional al manifiesto como se describe. El acceso al archivo ahora funciona como en Android 9 nuevamente. YMMV, probablemente no seguirá funcionando en versiones futuras.
fuente