Requesting Runtime Permission in Android Marshmallow

Android Marshmallow 6.0 is the latest version of android OS with newly user comparability and security options. One of them is Requesting Runtime Permission which is an excellent feature and a revolution in android application development field because of that feature user’s privacy is in user’s hand. Android application customer can now handle which part of his information can be accessed by the application developer by simply enabling and disabling the Runtime Permission. There are 9 different types of permissions in this group also called as Android Dangerous permission group.

List of all Runtime Dangerous Permission Name.

Permission Group NamePermission Name
CAMERACAMERA
CONTACTSREAD_CONTACTS

WRITE_CONTACTS

GET_ACCOUNTS
MICROPHONERECORD_AUDIO
LOCATIONACCESS_FINE_LOCATION

ACCESS_COARSE_LOCATION
SENSORSBODY_SENSORS
STORAGEREAD_EXTERNAL_STORAGE

WRITE_EXTERNAL_STORAGE
SMSSEND_SMS

RECEIVE_SMS

READ_SMS

RECEIVE_WAP_PUSH

RECEIVE_MMS
PHONEREAD_PHONE_STATE

CALL_PHONE

READ_CALL_LOG

WRITE_CALL_LOG

ADD_VOICEMAIL

USE_SIP

PROCESS_OUTGOING_CALLS
CALENDARREAD_CALENDAR

WRITE_CALENDAR

Contents in this project Requesting Runtime Permission in Android Marshmallow 6.0 :

  1. Watch the live demo video.
  2. Start a new application development project in Android Studio.
  3. Add permission in Manifest.xml file.
  4. Create a button in activity layout file.
  5. Declare button object and assign button ID in MainActivity.java .
  6. Create method to implement Runtime Permission.
  7. Set setOnClickListener() on button.
  8. Call Runtime method inside button click scope.

1. Watch the live demo video :

2. Start a new application development project in Android Studio.

After seeing the live demo video we could actually know how the Runtime Permission works in android apps.

3. Add permission in Manifest.xml file.

Next rule is to add permission in your Manifest.xml file we would add READ_EXTERNAL_STORAGE permission. This is used to give the privilege of application so app can access the memory card or storage of your device.

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

4. Create a button in activity layout file.

<Button
    android:text="Enable RunTime Permission"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:id="@+id/button" />

5. Declare button object and assign button ID in MainActivity.java .

Button button ;
button = (Button)findViewById(R.id.button);

6. Create method to implement Runtime Permission..

public void AllowRunTimePermission(){

    if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE))
    {

        Toast.makeText(MainActivity.this,"READ_EXTERNAL_STORAGE permission Access Dialog", Toast.LENGTH_LONG).show();

    } else {

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

    }
}

@Override
public void onRequestPermissionsResult(int RC, String per[], int[] Result) {

    switch (RC) {

        case 1:

            if (Result.length > 0 && Result[0] == PackageManager.PERMISSION_GRANTED) {

                Toast.makeText(MainActivity.this,"Permission Granted", Toast.LENGTH_LONG).show();

            } else {

                Toast.makeText(MainActivity.this,"Permission Canceled", Toast.LENGTH_LONG).show();

            }
            break;
    }
}

 7. Set setOnClickListener() on button.

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    }
});

 8. Call Runtime method inside button click scope.

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        AllowRunTimePermission();

    }
});

Final code for Requesting Runtime Permission in Android Marshmallow project :

Code for MainActivity.java file.

package com.androidjson.runtimepermission_androidjsoncom;
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    Button button ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button)findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                AllowRunTimePermission();

            }
        });
    }

    public void AllowRunTimePermission(){

        if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE))
        {

            Toast.makeText(MainActivity.this,"READ_EXTERNAL_STORAGE permission Access Dialog", Toast.LENGTH_LONG).show();

        } else {

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

        }
    }

    @Override
    public void onRequestPermissionsResult(int RC, String per[], int[] Result) {

        switch (RC) {

            case 1:

                if (Result.length > 0 && Result[0] == PackageManager.PERMISSION_GRANTED) {

                    Toast.makeText(MainActivity.this,"Permission Granted", Toast.LENGTH_LONG).show();

                } else {

                    Toast.makeText(MainActivity.this,"Permission Canceled", Toast.LENGTH_LONG).show();

                }
                break;
        }
    }

}

Code for activity_main.xml layout file.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.androidjson.runtimepermission_androidjsoncom.MainActivity">

    <Button
        android:text="Enable RunTime Permission"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/button" />

</RelativeLayout>

Code for AndroidManifest.xml file.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidjson.runtimepermission_androidjsoncom">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Screenshot:

Runtime Permission

Download Code

Leave a Reply

Your email address will not be published. Required fields are marked *