Técnicamente, esto se debe a que la escritura en el almacenamiento interno no es compatible cuando se utiliza la aplicación de la cámara para capturar una imagen. De hecho, puede observar una excepción impresa en logcat que indica Writing to internal storage is not supported
. Sin embargo, la verdadera razón por la que esto no funciona es porque de forma predeterminada está creando un archivo que es privado para su paquete de aplicación y otra aplicación (es decir, la aplicación de cámara) no puede acceder a esa ubicación de archivo porque no tiene permiso para hazlo. El almacenamiento externo es la única parte accesible globalmente del sistema de archivos.
La solución alternativa es que cree el archivo con permisos globales (WORLD_WRITEABLE). Normalmente, esto permite que la aplicación de la cámara acceda al archivo a través del Uri pasado. Allí no son realmente métodos para hacer esto directamente en File
, así que hay que crear el archivo usando los métodos disponibles en Context
y luego tomar un identificador para ella después:
//Remove if exists, the file MUST be created using the lines below
File f = new File(getFilesDir(), "Captured.jpg");
f.delete();
//Create new file
FileOutputStream fos = openFileOutput("Captured.jpg", Context.MODE_WORLD_WRITEABLE);
fos.close();
//Get reference to the file
File f = new File(getFilesDir(), "Captured.jpg");
Este tipo de límites también donde se puede coloque el archivo ya que los métodos Context
crean inherentemente archivos en el directorio raíz "archivos" y no puede redirigirlos al directorio de caché.
HTH
grande, yo tenía el presentimiento de que era el tema . Creo que voy a mover de nuevo las fotos de guardado temporalmente a la tarjeta SD, pero agregaré esto a mi toolkit :) – sgarman
¿Alguna idea sobre cómo resolver la desaprobación de Context.MODE_WORLD_WRITEABLE? – superbre
Desde [aquí] (http://developer.android.com/reference/android/content/Context.html): ** MODE_WORLD_WRITEABLE Esta constante ha quedado obsoleta en el nivel de API 17. La creación de archivos de escritura mundial es muy peligrosa, y probablemente para causar agujeros de seguridad en las aplicaciones.Se desaconseja encarecidamente; ** – Atul