import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class MainActivity extends AppCompatActivity
{
private static final String TAG = MainActivity.class.getSimpleName();
private int KEY_PERMISSION = 0;
private PermissionResult permissionResult;
private String permissionsAsk[];
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (updatePermissions()) {
Toast.makeText(MainActivity.this, "Already permission given...", Toast.LENGTH_LONG).show();
}
}
private boolean updatePermissions() {
boolean isGranted = isPermissionsGranted(
this, new String[]{Manifest.permission.READ_CONTACTS,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE});
if (!isGranted) {
askCompactPermissions(new String[]{Manifest.permission.READ_CONTACTS,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE},
new PermissionResult() {
@Override public void permissionGranted() {
Toast.makeText(MainActivity.this, "Now give permission...", Toast.LENGTH_LONG).show();
}
@Override public void permissionDenied() {
Toast.makeText(MainActivity.this, "Please allow permission to load the data.", Toast.LENGTH_SHORT).show();
}
@Override public void permissionForeverDenied() {
Toast.makeText(MainActivity.this, "Please allow permission from Application setting.", Toast.LENGTH_SHORT).show();
}
});
}
return isGranted;
}
public boolean isPermissionsGranted(Context context, String permissions[]) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
return true;
boolean granted = true;
for (String permission : permissions) {
if (!(ActivityCompat.checkSelfPermission(
context, permission) == PackageManager.PERMISSION_GRANTED))
granted = false;
}
return granted;
}
public void askCompactPermissions(String permissions[], PermissionResult permissionResult) {
KEY_PERMISSION = 200;
permissionsAsk = permissions;
this.permissionResult = permissionResult;
internalRequestPermission(permissionsAsk);
}
private void internalRequestPermission(String[] permissionAsk) {
String arrayPermissionNotGranted[];
ArrayList<String> permissionsNotGranted = new ArrayList<>();
for (String aPermissionAsk : permissionAsk) {
if (!isPermissionGranted(this, aPermissionAsk)) {
permissionsNotGranted.add(aPermissionAsk);
}
}
if (permissionsNotGranted.isEmpty()) {
if (permissionResult != null)
permissionResult.permissionGranted();
} else {
arrayPermissionNotGranted = new String[permissionsNotGranted.size()];
arrayPermissionNotGranted = permissionsNotGranted.toArray(arrayPermissionNotGranted);
ActivityCompat.requestPermissions(this,
arrayPermissionNotGranted, KEY_PERMISSION);
}
}
public boolean isPermissionGranted(Context context, String permission) {
return (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) ||
(ActivityCompat.checkSelfPermission(context, permission) ==
PackageManager.PERMISSION_GRANTED);
}
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode != KEY_PERMISSION) {
return;
}
List<String> permissionDenied = new LinkedList<>();
boolean granted = true;
for (int i = 0; i < grantResults.length; i++) {
if (!(grantResults[i] == PackageManager.PERMISSION_GRANTED)) {
granted = false;
permissionDenied.add(permissions[i]);
}
}
if (permissionResult != null) {
if (granted) {
permissionResult.permissionGranted();
} else {
for (String s : permissionDenied) {
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, s)) {
permissionResult.permissionForeverDenied();
return;
}
}
permissionResult.permissionDenied();
}
}
}
}
*****************************************************************************************
/***
PermissionResult Interface
***/
public interface PermissionResult
{
void permissionGranted();
void permissionDenied();
void permissionForeverDenied();
}
****************************************************************************************
/***
AndroidManifest.xml
***/
<?xml version="1.0" encoding="utf-8"?><manifest package="com.android.permissiondialog" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" 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>