TC75 Android 4.4.2 : Problem with writing file on sd card

Hi,

 

I'm trying to write on removable storage , But getting IOException

 

java.io.FileNotFoundException: /storage/extSdCard/PWC/Images/IMG_20151210_113150.jpg: open failed: EACCES (Permission denied)

at libcore.io.IoBridge.open(IoBridge.java:409)

 

Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)

at libcore.io.Posix.open(Native Method)

at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)

at libcore.io.IoBridge.open(IoBridge.java:393)

 

The line I used to write is

 

try{

 

FileInputStream myinput = new FileInputStream(from);

 

String outfilename = to;

 

OutputStream myoutput = new FileOutputStream(outfilename);

// transfer byte to inputfile to outputfile

byte[] buffer = new byte[1024];

int length;

while ((length = myinput.read(buffer)) > 0) {

myoutput.write(buffer, 0, length);

}

 

//Close the streams

myoutput.flush();

myoutput.close();

myinput.close();

 

return true;

}

catch ( IOException e){

e.printStackTrace();

return false;

}

 

from and to is a valid file location.

 

If I use Internal and Emulated External file path , Above is working fine.

If I use secondary or removable storage file path , getting issue.

 

The path gives canWrite as true.

 

Testing on Android 4.4.2 Samsung SM-G350E and Zebra TC75

 

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); // set the image file name
startActivityForResult(intent, 300);

 

Using the above code is working and writing the image on samsung,

but failed to write on zebra , the save button with 'tick' icon has no response.

Pietro Francesc...
Hi Ram,you can't write on the

Hi Ram,

you can't write on the secondary storage, on a KitKat device (Android v4.4.x) outside of your own package folder (/<path to SDCard>/data/Android/<app package name>.

This is a change driven by Google in the Android 4.4 Compatibility Definition Document (CDD).

Because on the TC75 you've an internal 1GB partition available as storage, the SDCard you put into the device is a "Secondary Storage" and you can write only in your own package folder.

I don't know why you're getting a different result on the Samsung device. Maybe because you don't have an internal partition available as storage or because Samsung is mounting the external SDCard as the primary storage.

In this case the solution would be to write in the internal partition or write on the SDCard in your own package folder.

~Pietro

Vote: 
Vote up!
Vote down!

Points: 1

You voted ‘up’


Ram Charan
Hi ​,I understand and I

Hi ​,

I understand and I should be able to access the data directory on removable storage,

But getExternalFilesDir() gives me data directory on emulated external storage , not removable storage.

Hardcoding the removable storage code and calling mkdirs() also doesn't create the data directory.

Is it that the data directory on removable storage will be accessible only after the emulated external is full ?

Vote: 
Vote up!
Vote down!

Points: 0

You voted ‘up’


Ram Charan
My Bad ,I had to use

My Bad ,

I had to use getExternalFilesDirs() to get array of all the files directory , which includes sdcard

Thanks

Vote: 
Vote up!
Vote down!

Points: 0

You voted ‘up’


Log in to post comments