Exception 'open failed: EACCES (Permission denied)' on Android Exception 'open failed: EACCES (Permission denied)' on Android android android

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


For API 23+ you need to request the read/write permissions even if they are already in your manifest.

// Storage Permissionsprivate static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE = {        Manifest.permission.READ_EXTERNAL_STORAGE,        Manifest.permission.WRITE_EXTERNAL_STORAGE};/** * Checks if the app has permission to write to device storage * * If the app does not has permission then the user will be prompted to grant permissions * * @param activity */public static void verifyStoragePermissions(Activity activity) {    // Check if we have write permission    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);    if (permission != PackageManager.PERMISSION_GRANTED) {        // We don't have permission so prompt the user        ActivityCompat.requestPermissions(                activity,                PERMISSIONS_STORAGE,                REQUEST_EXTERNAL_STORAGE        );    }}

AndroidManifest.xml

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

For official documentation about requesting permissions for API 23+, check https://developer.android.com/training/permissions/requesting.html


Google has a new feature on Android Q: filtered view for external storage. A quick fix for that is to add this code in the AndroidManifest.xml file:

<manifest ... >    <!-- This attribute is "false" by default on apps targeting Android Q. -->    <application android:requestLegacyExternalStorage="true" ... >     ...    </application></manifest>

You can read more about it here: https://developer.android.com/training/data-storage/compatibility


I had the same problem... The <uses-permission was in the wrong place. This is right:

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

The uses-permission tag needs to be outside the application tag.