Tag Archives: open failed

Android Error: open failed: EACCES (Permission denied)

When using Android to read SD card data, an error is reported. The reason is that after Android 6.0, in addition to adding read and write permissions in androidmanifest.xml, you also need to manually request permissions when using it.

1. Add read and write permissions to androidmanifest.xml:

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

2. To manually request permission before reading or writing:

import android.support.v4.app.ActivityCompat;

private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
    Manifest.permission.READ_EXTERNAL_STORAGE,
    Manifest.permission.WRITE_EXTERNAL_STORAGE
};

/**
 * Call this method before reading or writing to the sd card
 * 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
 */
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);
    }
}

Note: activitycompat is the method in android-support-v4.jar.