Skip to content Skip to sidebar Skip to footer

Android Contacts Permission Granted Without Asking At Runtime

I'm trying to request the ability to read contacts in an app, and have followed several tutorials. All of these use nearly the same code for this process. Below is the code in my M

Solution 1:

Try this,

private Context mContext=YourActivity.this;

privatestaticfinalint REQUEST = 112;

if (Build.VERSION.SDK_INT >= 23) {
    String[] PERMISSIONS = {android.Manifest.permission.READ_CONTACTS};
    if (!hasPermissions(mContext, PERMISSIONS)) {
        ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST );
    } else {
        readContacts();
    }
} else {
    readContacts();
}

get Permissions Result

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        caseREQUEST: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    readContacts();
            } else {
                Toast.makeText(mContext, "The app was not allowed to read your contact", Toast.LENGTH_LONG).show();
            }
        }
    }
}

check permissions for marshmallow

privatestaticbooleanhasPermissions(Context context, String... permissions) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                returnfalse;
            }
        }
    }
    returntrue;
}

Manifest

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

Solution 2:

I use RxPermission for permissions to make my code ultimately short.

First add these permissions (or one you need) in your manifest.xml.

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

Then ask run time permission from user in your activity.

RxPermissionsrxPermissions=newRxPermissions(this);
rxPermissions
.request(Manifest.permission.READ_CONTACTS) // ask single or multiple permission once
.subscribe(granted -> {
    if (granted) {
       // All requested permissions are granted
    } else {
       // At least one permission is denied
    }
});

add this library in your build.gradle

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}

Isn't this easy?

Solution 3:

As Divyesh Patel pointed out, I had the boolean statemetns mixed up, it should be

ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED)

Rather than

ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED)

Solution 4:

Important thing for you to note here that these permissions are asked only for devices with version>23 and if you have lower version of android then for only some models like redmi you have to invoke the permissions manually .

Otherwise version<23 generally do not ask for permissions. If you put in manifest. It will automatically take it, specially when you are installing app over usb.

Solution 5:

If any device has OS version below <23 or In app manifist file maxtarget version is below <23 then it will not ask permission in runtime because while the app installing on these devices you actually giving permission to all you mentioned.

So the runtime permissions are possible only in the case of device has OS version above 22(Lolipop).

Hope this helpful..

@Rajesh

Post a Comment for "Android Contacts Permission Granted Without Asking At Runtime"