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 Name | Permission Name |
---|---|
CAMERA | CAMERA |
CONTACTS | READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS |
MICROPHONE | RECORD_AUDIO |
LOCATION | ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION |
SENSORS | BODY_SENSORS |
STORAGE | READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE |
SMS | SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS |
PHONE | READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS |
CALENDAR | READ_CALENDAR WRITE_CALENDAR |
Contents in this project Requesting Runtime Permission in Android Marshmallow 6.0 :
- Watch the live demo video.
- Start a new application development project in Android Studio.
- Add permission in Manifest.xml file.
- Create a button in activity layout file.
- Declare button object and assign button ID in MainActivity.java .
- Create method to implement Runtime Permission.
- Set setOnClickListener() on button.
- 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: