Android marshmallow request permission? Android marshmallow request permission? android android

Android marshmallow request permission?


Open a Dialog using the code below:

 ActivityCompat.requestPermissions(MainActivity.this,                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},                    1);

Get the Activity result as below:

@Overridepublic void onRequestPermissionsResult(int requestCode,                                       String permissions[], int[] grantResults) {    switch (requestCode) {        case 1: {          // 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.                Toast.makeText(MainActivity.this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show();            }            return;        }        // other 'case' lines to check for other        // permissions this app might request    }}

More info: https://developer.android.com/training/permissions/requesting.html


This structure I am using to check if my app has permission and than request if it does not have permission. So in my main code from where i want to check write following :

int MyVersion = Build.VERSION.SDK_INT;if (MyVersion > Build.VERSION_CODES.LOLLIPOP_MR1) {                if (!checkIfAlreadyhavePermission()) {                    requestForSpecificPermission();                }}

Module checkIfAlreadyhavePermission() is implemented as :

private boolean checkIfAlreadyhavePermission() {    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.GET_ACCOUNTS);    if (result == PackageManager.PERMISSION_GRANTED) {        return true;    } else {        return false;    }}

Module requestForSpecificPermission() is implemented as :

private void requestForSpecificPermission() {        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.GET_ACCOUNTS, Manifest.permission.RECEIVE_SMS, Manifest.permission.READ_SMS, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 101);}

and Override in Activity :

@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {    switch (requestCode) {        case 101:            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {                //granted            } else {                //not granted            }            break;        default:            super.onRequestPermissionsResult(requestCode, permissions, grantResults);    }}

Refer this link for more details : http://revisitingandroid.blogspot.in/2017/01/how-to-check-and-request-for-run-time.html


Starting in Android Marshmallow, we need to request the user for specific permissions. We can also check through code if the permission is already given. Here is a list of commonly needed permissions:

  • android.permission_group.CALENDAR

    • android.permission.READ_CALENDAR
    • android.permission.WRITE_CALENDAR
  • android.permission_group.CAMERA

    • android.permission.CAMERA
  • android.permission_group.CONTACTS

    • android.permission.READ_CONTACTS
    • android.permission.WRITE_CONTACTS
    • android.permission.GET_ACCOUNTS
  • android.permission_group.LOCATION

    • android.permission.ACCESS_FINE_LOCATION
    • android.permission.ACCESS_COARSE_LOCATION
  • android.permission_group.MICROPHONE

    • android.permission.RECORD_AUDIO
  • android.permission_group.PHONE

    • android.permission.READ_PHONE_STATE
    • android.permission.CALL_PHONE
    • android.permission.READ_CALL_LOG
    • android.permission.WRITE_CALL_LOG
    • android.permission.ADD_VOICEMAIL
    • android.permission.USE_SIP
    • android.permission.PROCESS_OUTGOING_CALLS
  • android.permission_group.SENSORS

    • android.permission.BODY_SENSORS
  • android.permission_group.SMS

    • android.permission.SEND_SMS
    • android.permission.RECEIVE_SMS
    • android.permission.READ_SMS
    • android.permission.RECEIVE_WAP_PUSH
    • android.permission.RECEIVE_MMS
    • android.permission.READ_CELL_BROADCASTS
  • android.permission_group.STORAGE

    • android.permission.READ_EXTERNAL_STORAGE
    • android.permission.WRITE_EXTERNAL_STORAGE

Here is sample code to check for permissions:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) {    if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.WRITE_CALENDAR)) {        AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);        alertBuilder.setCancelable(true);        alertBuilder.setMessage("Write calendar permission is necessary to write event!!!");        alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {            @TargetApi(Build.VERSION_CODES.JELLY_BEAN)            public void onClick(DialogInterface dialog, int which) {                ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.WRITE_CALENDAR}, MY_PERMISSIONS_REQUEST_WRITE_CALENDAR);            }        });    } else {        ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.WRITE_CALENDAR}, MY_PERMISSIONS_REQUEST_WRITE_CALENDAR);    }}