Tecnicamente, questo è dovuto al fatto che la scrittura nella memoria interna non è supportata quando si utilizza l'applicazione Fotocamera per acquisire un'immagine. In effetti, potresti notare un'eccezione stampata nel logcat che indica Writing to internal storage is not supported
. Tuttavia, il vero motivo per cui questo non funziona è che di default si sta creando un file privato per il pacchetto dell'applicazione e un'altra applicazione (ad esempio l'app Fotocamera) non può accedere a tale percorso perché non dispone dell'autorizzazione per fare così. La memoria esterna è l'unica porzione globalmente accessibile del filesystem.
Per risolvere questo problema è necessario creare il file con autorizzazioni globali (WORLD_WRITEABLE). In genere, ciò consente all'app Fotocamera di accedere al file tramite l'Uri passato. Ci non sono realmente i metodi per farlo direttamente sul File
, quindi bisogna creare il file utilizzando i metodi disponibili in Context
e poi afferrare una maniglia ad essa in seguito:
//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");
anche questo genere di limiti in cui è possibile posizionare il file poiché i metodi Context
creano intrinsecamente i file nella directory "file" di root e non è possibile reindirizzarlo alla directory della cache.
HTH
Grande, ho avuto la sensazione che era il problema . Penso che mi limiterò a spostare temporaneamente le foto salvandole sulla scheda SD, ma aggiungerò questo al mio toolkit :) – sgarman
Qualche idea su come risolvere la deprecazione Context.MODE_WORLD_WRITEABLE? – superbre
Da [qui] (http://developer.android.com/reference/android/content/Context.html): ** MODE_WORLD_WRITEABLE Questa costante è stata dichiarata obsoleta al livello API 17. La creazione di file scrivibili in tutto il mondo è molto pericolosa e verosimile causare buchi di sicurezza nelle applicazioni.È fortemente scoraggiato; ** – Atul