¿Por qué Environment.getExternalStoragePublicDirectory no funciona en algunos dispositivos (fabricados especialmente desde principios de 2011)?
Estoy tratando de almacenar las imágenes capturadas de la cámara al directorio de almacenamiento público, aquí está mi parte del código para almacenar la imagen:
protected File createImageFile() throws IOException { // Create an image file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_" + timeStamp + "_"; File storageDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES); File image = File.createTempFile( imageFileName, /* prefix */ ".jpg", /* suffix */ storageDir /* directory */ ); return image; }
Su funcionamiento muy bien en la mayoría de los dispositivos, pero en algunos dispositivos i obtener
- Subir archivo grande en segundo plano (el servicio se reinicia cuando la aplicación se cierra)
- Cómo acceder a los archivos de la memoria del teléfono o de la tarjeta SD
- Android File Transfer no puede ver una carpeta creada por la aplicación
- Mejor lugar / área para almacenar el archivo para el período Trail
- escribir archivo privado en el almacenamiento interno
Java.io.IOException: open failed: ENOENT (Ningún archivo o directorio)
Así que mi pregunta es ¿por qué la misma pieza de código está funcionando bien en la mayoría de los dispositivos y por qué no en algunos dispositivos y cómo solucionar este problema?
- Reproducción de vídeos del sistema de archivos Chrome no funciona en Android
- Android escribir en disco no fiable - escrito file.length! = Expected.length
- Creación de vínculos duros y enlaces simbólicos en Android
- ¿Dónde está mi carpeta de aplicación en android?
- ¿La manera más rápida de leer largo del archivo?
- ¿Cómo eliminar la aplicación raíz / app / archivos?
- El archivo existe y el directorio IS, pero listFiles () devuelve null
- Android - Explorar mis datos de aplicación
Si estás almacenando tus imágenes en un directorio público, supongo que es porque quieres compartirlas con otras aplicaciones. Tienes que hacerte la siguiente pregunta: "¿Quiero que los archivos generados por mi aplicación para sobrevivir mi aplicación se desinstale?" Si la respuesta es no (que recomiendo) debe utilizar Context.getExternalMediaDirs()
lugar. Además de la API 19 y superiores, estos directorios no necesitan permisos de almacenamiento.
Si la respuesta es sí (O_o), debe utilizar Environment.getExternalStorageDirectory()
o Enrivonment.getExternalStoragePublicDirectory(String)
. Estos siempre requieren permisos de almacenamiento. Además, como usted ya experimentó y otros señalaron, estos directorios podrían no existir todavía. Compruebe la documentación de la API para obtener más información, pero en resumen, debe llamar a paths.mkdirs()
antes para asegurarse de que existan los dirs.
En su lugar, use context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
.
puedes usar
File storageDir = new File("/mnt/extSdCard/Pictures")
o
File storageDir =new File("/mnt/external_sd/Pictures")
Por supuesto es mejor comprobar el directorio primero usando este código:
if(storageDir.isDirectory())
- ¿Cómo transferir archivos desde la memoria interna a sdcard en android?
- Creación de una barra de herramientas personalizada en android