Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android SecurityException: Permission Denial

I have permission problems in my Android app: here the log.

06-25 17:25:35.862  12039-13799/? E/DatabaseUtils﹕ Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=1580, uid=10108 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
        at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:605)
        at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:480)
        at android.content.ContentProvider$Transport.query(ContentProvider.java:211)
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
        at android.os.Binder.execTransact(Binder.java:453)



06-25 17:25:35.870    1580-2997/? E/iu.UploadsManager﹕ Insufficient permissions to access media store
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=1580, uid=10108 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
        at android.os.Parcel.readException(Parcel.java:1599)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
        at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
        at android.content.ContentResolver.query(ContentResolver.java:498)
        at android.content.ContentResolver.query(ContentResolver.java:441)
        at ifh.i(PG:5904)
        at ifh.h(PG:619)
        at ifh.<init>(PG:187)
        at iel.c(PG:4045)
        at gen_binder.root.RootModule$Generated.a(PG:1131)
        at nmw.e(PG:415)
        at nmw.b(PG:242)
        at nmw.a(PG:207)
        at nmw.a(PG:493)
        at ier.a(PG:2195)
        at ier.onPerformSync(PG:125)
        at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:272)


06-25 17:24:37.031    1580-1611/? E/GooglePlusContactsSync﹕ Failed to clear out contacts
java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2ForLG from ProcessRecord{9557af9 1580:com.google.android.apps.plus/u0a108} (pid=1580, uid=10108) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
        at android.os.Parcel.readException(Parcel.java:1599)
        at android.os.Parcel.readException(Parcel.java:1552)
        at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3652)
        at android.app.ActivityThread.acquireProvider(ActivityThread.java:4866)
        at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2020)
        at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1488)
        at android.content.ContentResolver.query(ContentResolver.java:482)
        at android.content.ContentResolver.query(ContentResolver.java:441)
        at dpm.a(PG:397)
        at dpm.b(PG:1345)
        at dpn.run(PG:282)
        at java.lang.Thread.run(Thread.java:818)

I know it's a permissions problem and I could solve with grant permission like this:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

and then using this to set permission to my providers:

    @Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

The problem is that I don't know in what part of my project I have to put this permission request: I'm using Auth0 Custom UI autenthication for login, Mysqlite as internal database and GoogleCards for a ListView.

Can you help me to understand how to grant this Permission Denial?

Thank you very much

like image 325
dayroma Avatar asked Mar 02 '26 01:03

dayroma


1 Answers

Well, I would recommend using Ask, it's a permission helper library.

Using this you won't have to write so much code, just two lines will get the things done for you.

Here are the usage details.

First, compile the dependency in your build.gradle:

dependencies {
    compile 'com.vistrav:ask:2.4'
}

and then in the start of the activity in OnCreate or on any button press you can ask permission like this:

Ask.on(this)
    .forPermissions(Manifest.permission.READ_CONTACTS)
    .go();

and that's it.

You can find more information here. I am using it in almost all my projects, and it's simple and easy.

like image 90
Max Avatar answered Mar 03 '26 14:03

Max



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!