Android Exception : java.io.IOException: open fail

2019-01-25 02:42发布

问题:

This question already has an answer here:

  • Exception 'open failed: EACCES (Permission denied)' on Android 25 answers

For some strange reason, am constantly facing an issue with different types of Android devices, for saving the captured images on the device storage.

Here, is the detailed error log, of what, actually am getting.

java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:940)
at com.parkhya.pick_for_shareAflash.HomeActivity.resizeImage(HomeActivity.java:456)
at com.parkhya.pick_for_shareAflash.HomeActivity.onActivityResult(HomeActivity.java:393)
Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:933)

Although, all the other Android apps, like, Instagram and others, are able to save the camera clicked images on the devices. Anybody, can you please suggest, what should I do, in order for my app, to save the camera pictures in sdcard.

回答1:

please add the permission for Allows an application to write to external storage.

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

Allows an application to read from external storage.

Any app that declares the WRITE_EXTERNAL_STORAGE permission is implicitly granted this permission.

This permission is enforced starting in API level 19. Before API level 19, this permission is not enforced and all apps still have access to read from external storage. You can test your app with the permission enforced by enabling Protect USB storage under Developer options in the Settings app on a device running Android 4.1 or higher.



回答2:

This may help you. I face the same issue when writing the file on sdcard. I have set all required permission to write the file but I used the file object like below:

Wrong:

File myFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile()+fileName);

Correct:

File myFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile(), fileName);

That means the path was wrong.



回答3:

Solution what i find is

edit the Emulator 1. go to android virtual device manager and then edit the emulator 2. set say 100 MB for Sd card for the respected emulator and say Ok 3. save and close emulator and start 4. path saved is click DDMS mnt/sdcard/yourfilename it worked for me the app is not giving Error and is working



回答4:

Note the following trap: Someone else wrote

<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>

in AndroidManifest.xml. I wanted to save files and added the mentioned line and got

<uses-permission android:name="android.permission.INTERNET" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</uses-permission>

which is bad syntax. It should be

<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

or

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />