Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing files to external storage in Android failing

As the title points out, I'm having trouble writing files to the external storage. My debug device is a Nexus 5. The thing is, I'm able to read files perfectly from the device (I've been trying with the ones in the Download Folder) but cannot write them. I am aware that I must do this while the device isn't connected to the computer. But it doesn't work either.

In fact, I've tried reading the state of the SD card prior to writing to it (which didn't work, of course). The state showed as "mounted" either when the device was connected to my PC or not. And I compared the state to Environment.MEDIA_MOUNTED_READ_ONLY and Environment.MEDIA_MOUNTED without any success. My device is in none of these states.

One thing which you must know is that my phone doesn't have an external SD card, as it's an internal one. This results in my device having a "/storage/emulated/0/..." directory for the external storage.

I must also point out that I have implemented the following tags in my Android Manifest:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE"/>

I don't have any clue to what might be happening. Another thing which might help is that I've tried managing files with winrar (for Android) and I've been able to remove files with the device connected to my PC as well as without having it connected. So I don't know what to do.

The code which I'm using to write a file is the following. Bear in mind that it should read an image file (which it does), convert it into a string, convert it back into an image and then save it to the Downloads Folder:

 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();

What should I do?

like image 221
blastervla Avatar asked Jul 30 '15 03:07

blastervla


People also ask

How do I get permission to write to external storage on Android?

To read and write data to external storage, the app required WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE system permission. These permissions are added to the AndroidManifest. xml file. Add these permissions just after the package name.

How do I disable external storage on Android?

In Android versions 3.0 and higher, open the Settings menu, choose "USB Utilities" and turn off USB storage to use MTP instead.


1 Answers

Just fix ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE to android.permission.WRITE_EXTERNAL_STORAGE in your uses-permission.

I've encounterd this problem, UPPERCASE in permission is not useful.

like image 81
Desmond Yao Avatar answered Oct 03 '22 02:10

Desmond Yao