No se puede crear una carpeta en el almacenamiento externo en Android
Mi teléfono de desarrollo es unNexus 5
, corriendoAndroid 4.4.2
.
En mi aplicación, intento crear una carpeta en el almacenamiento externo que almacenará información de depuración para mi aplicación. Básicamente contendrá todos los comandos ejecutados por la aplicación, de modo que cuando un usuario encuentre un problema, tenga la opción de que me envíe la información de la carpeta de depuración para analizar.
Comencé tratando de escribir un archivo en la carpeta, pero descubrí que había un error al crear la carpeta. Al principio estaba usandomkdir()
, luego me mudé amkdirs()
que tampoco funcionó.
yo tengo<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
en mi manifiesto
Aquí está el código para crear la carpeta:
File folder = new File(Environment.getExternalStorageDirectory() + "/DebugData");
String path = folder.getPath();
if(!folder.mkdirs() || !folder.exists()){
Log.e(LOG_TAG, path + " failed");
} else {
Log.d(LOG_TAG, path + " succeeded");
}
Esto es lo que también he probado:
//Check SD card state
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) {
Log.e(LOG_TAG, "Error: external storage is read only or unavailable");
} else {
Log.d(LOG_TAG, "External storage is not read only or unavailable");
}
Esto devuelve que el almacenamiento externo esno solo lectura o no disponible.
También he probado diferentes caminos, comoFile folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Folder1");
Aquí es donde se volvió realmente confuso.
Intenté el desarrollo en diferentes teléfonos. En primer lugar, agarré unGalaxy S4 GT-i9505
corriendoAndroid 4.2.2
Y funcionó. Pude crear las carpetas y escribirles. Esto me mostró que el código estaba funcionando. Además, la ruta devuelta al ejecutar el código en el S4 y Nexus 5 era la misma.
Entonces pensé que podría ser una versión de Android específica. Así que agarré unNexus 4
conAndroid 4.4.2
y el código también funcionó. Creé las carpetas y me permitió escribirles.
Ninguno de los teléfonos está rooteado y todos son estándar. No hay aplicaciones especiales ni nada que se me ocurra en cuanto a la configuración del Nexus 5 que pueda causar problemas de permisos. La conexión se establece en Dispositivo de medios (MTP).
EDITAR:
Debo agregar que he intentado lo siguiente, que tampoco funcionó:
Escribir un archivo en el directorio raíz del almacenamiento externoCrear el archivo en el directorio raíz de almacenamiento externo y escribir en élCrear una carpeta en una ruta delineada y escribirle un archivoCrear el archivo en la ruta indicada y escribir en élEstoy confundido en cuanto a qué está causando esto, ¿hay algo más que pueda probar o cambiar para solucionar el problema?
EDITAR 2:
Resulta que el problema se debió, creo, a la indexación.
Básicamente, todos los demás dispositivos que probé me permitieron volver a conectar la conexión USB y ver los archivos y carpetas creados.
Por alguna razón, mi Nexus 5 no indexa las carpetas / archivos, aunque existan.
Descargué una aplicación de explorador de archivos de terceros diferente y noté que todas las carpetas y archivos estaban allí.
Entonces, para ver estas carpetas y archivos a través de la depuración de USB, tengo que reiniciar el teléfono para volver a indexarlos, lo que parece bastante molesto, pero es mejor que no funcione en absoluto.
Gracias.