Come indicato dal titolo, ho problemi a scrivere file nella memoria esterna. Il mio dispositivo di debug è un Nexus 5. Il fatto è che sono in grado di leggere i file perfettamente dal dispositivo (ho provato con quelli nella cartella Download) ma non riesco a scriverli. Sono consapevole che devo farlo mentre il dispositivo non è collegato al computer. Ma non funziona neanche.Scrittura di file su una memoria esterna in Android non funzionante
Infatti, ho provato a leggere lo stato della scheda SD prima di scriverlo (che ovviamente non funzionava). Lo stato mostrato come "montato" sia quando il dispositivo è stato collegato al mio PC o meno. E ho confrontato lo stato con Environment.MEDIA_MOUNTED_READ_ONLY
e Environment.MEDIA_MOUNTED
senza alcun successo. Il mio dispositivo non si trova in nessuno di questi stati.
Una cosa che devi sapere è che il mio telefono non ha una scheda SD esterna, in quanto è interna. Ciò comporta che il mio dispositivo abbia una directory "/ storage/emulated/0/..." per la memoria esterna.
Devo anche sottolineare che ho implementato le seguenti tag nel mio manifesto Android:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE"/>
Non ho alcun indizio di ciò che potrebbe accadere. Un'altra cosa che potrebbe aiutare è che ho provato a gestire i file con winrar (per Android) e sono stato in grado di rimuovere i file con il dispositivo collegato al mio PC e senza averlo collegato. Quindi non so cosa fare.
Il codice che sto usando per scrivere un file è il seguente. Tenete a mente che si deve leggere un file immagine (che lo fa), convertirlo in una stringa, riconvertirlo in un'immagine e quindi salvarlo nella cartella Downloads:
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/base_image.jpg");
// Reading a Image file from file system
FileInputStream imageInFile = new FileInputStream(file);
byte imageData[] = new byte[(int) file.length()];
imageInFile.read(imageData);
// Converting Image byte array into Base64 String
String imageDataString = encodeImage(imageData);
// Converting a Base64 String into Image byte array
byte[] imageByteArray = decodeImage(imageDataString);
File newFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "converted_image.jpg");
//Write a image byte array into file system
FileOutputStream imageOutFile = new FileOutputStream(newFile);
imageOutFile.write(imageByteArray);
imageInFile.close();
imageOutFile.close();
Cosa devo fare?
Sei sicuro che il file si chiude per scriverlo? – Raghunandan
Sto creando un nuovo file. O, almeno, è quello che sto tentando. Ottengo l'eccezione File non trovato durante il tentativo di crearlo e l'errore EACCES (autorizzazione negata). Questo è il mio problema principale qui. Sto facendo qualcosa di sbagliato? – blastervla