Sostituire:
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES)
Con:
private File createImageFile() throws IOException {
// Create an image file name
assicuratevi di chiamare:
mkdirs() // and not mkdir()
Ecco il codice che dovrebbe funzionare per voi:
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = new File(Environment.getExternalStorageDirectory().toString(), "whatever_directory_existing_or_not/sub_dir_if_needed/");
storageDir.mkdirs(); // make sure you call mkdirs() and not mkdir()
File image = File.createTempFile(
imageFileName, // prefix
".jpg", // suffix
storageDir // directory
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = "file:" + image.getAbsolutePath();
Log.e("our file", image.toString());
return image;
}
Ho avuto una brutta esperienza seguendo l'esempio dato in Android Studio Documentation e ho scoperto che ci sono molti altri vivendo lo stesso su questo argomento particolare qui a StackOverflow, è perché anche se abbiamo impostato
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
il problema persiste in alcuni dispositivi.
La mia esperienza è stata che l'esempio ha funzionato quando l'ho provato in modalità di debug, dopo altri 3 test è accaduto che il mio SD fosse improvvisamente danneggiato, ma non penso che abbia a che fare con il loro esempio (divertente) . Ho acquistato una nuova scheda SD e l'ho provata di nuovo, solo per rendermi conto che ancora sia la modalità di rilascio che quella di debug hanno fatto lo stesso log degli errori: la directory non esiste ENOENT. Alla fine, ho dovuto creare le directory che contengono le immagini catturate dalla fotocamera del mio telefono. E avevo ragione, funziona perfettamente.
Spero che questo aiuti voi e gli altri là fuori a cercare risposte.
La [esempio dato nel riferimento API] (http://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory (java. lang.String)) ha questa linea: '// Assicurati che la cartella Pictures esista. path.mkdirs(); '. Sei sicuro che la directory esista già? –
Prova questo link: [Android canvas save always java.io.IOException: open failed: ENOENT] (http://stackoverflow.com/questions/18605440/android-canvas-save-always-java-io-ioexception-open- failed-enoent-no-such-fil) –
Grazie! Nell'allenamento non c'è un suggerimento. Avrei dovuto cercare i riferimenti API. Grazie! –