mario595 mario595 - 4 months ago 74
Android Question

Getting Permission Denial Exception

I have an activity in my app that allows the user to select several files from the device one by one, I am using an intent like this:

Intent intent = new Intent();
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_attachments_activity_chooser_label)), SELECT_PICTURE);

This is working perfectly fine, I am getting the Uri's of the files selected, they look like this:


Then, if the file is an image, I am decoding it with:

InputStream streamForDecodeBitmap = MyApp.getContext().getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(streamForDecodeBitmap, null, options);

When the user clicks a button, I pass the list of Uris to another activity via intent and in this activity, in an AsyncTask, I am encoding the file in base64 for send it over the network:

InputStream is = MyApp.getContext().getContentResolver().openInputStream(uri);
byte[] inputData = getBytes(is);
return Base64.encodeToString(inputData, Base64.DEFAULT);

The problem is when I open the inputStream, sometimes it works but most of the times I am getting this exception:

E/AndroidRuntime(22270): Caused by: java.lang.SecurityException: Permission Denial: opening provider from ProcessRecord{42858fe0} (pid=22270, uid=10246) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS

These are all the permissions in my manifest:

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

I am testing in a device with KITKAT (API 19).


Pls check these too:
Android KitKat securityException when trying to read from MediaStore
Permission denial: opening provider

For the same problem on KITKAT...I used this, its an option/workaround i had found from one of SO links, you will be able to select files from Downloads/Recent.

public static final int KITKAT_VALUE = 1002;

Intent intent;

if (Build.VERSION.SDK_INT < 19) {
    intent = new Intent();
    startActivityForResult(intent, KITKAT_VALUE);
} else {
    intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    startActivityForResult(intent, KITKAT_VALUE);

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == KITKAT_VALUE ) {
        if (resultCode == Activity.RESULT_OK) {
            // do something here

Reference: Android Gallery on KitKat returns different Uri for Intent.ACTION_GET_CONTENT