import
android.Manifest;
import
android.app.AlertDialog;
import
android.content.Intent;
import
android.net.Uri;
import
android.os.Bundle;
import
android.provider.Settings;
import
android.widget.Button;
import
android.widget.Toast;
import
androidx.appcompat.app.AppCompatActivity;
import
com.karumi.dexter.Dexter;
import
com.karumi.dexter.MultiplePermissionsReport;
import
com.karumi.dexter.PermissionToken;
import
com.karumi.dexter.listener.PermissionRequest;
import
com.karumi.dexter.listener.multi.MultiplePermissionsListener;
import
java.util.List;
public
class
MainActivity
extends
AppCompatActivity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button requestPermissionsBtn = findViewById(R.id.idBtnRequestPermission);
requestPermissionsBtn.setOnClickListener(v -> {
requestPermissions();
});
}
private
void
requestPermissions() {
Dexter.withActivity(
this
)
.withPermissions(Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_CONTACTS)
.withListener(
new
MultiplePermissionsListener() {
@Override
public
void
onPermissionsChecked(MultiplePermissionsReport multiplePermissionsReport) {
if
(multiplePermissionsReport.areAllPermissionsGranted()) {
Toast.makeText(MainActivity.
this
,
"All the permissions are granted.."
, Toast.LENGTH_SHORT).show();
}
if
(multiplePermissionsReport.isAnyPermissionPermanentlyDenied()) {
showSettingsDialog();
}
}
@Override
public
void
onPermissionRationaleShouldBeShown(List<PermissionRequest> list, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();
}
}).withErrorListener(error -> {
Toast.makeText(getApplicationContext(),
"Error occurred! "
, Toast.LENGTH_SHORT).show();
})
.onSameThread().check();
}
private
void
showSettingsDialog() {
AlertDialog.Builder builder =
new
AlertDialog.Builder(MainActivity.
this
);
builder.setTitle(
"Need Permissions"
);
builder.setMessage(
"This app needs permission to use this feature. You can grant them in app settings."
);
builder.setPositiveButton(
"GOTO SETTINGS"
, (dialog, which) -> {
dialog.cancel();
Intent intent =
new
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts(
"package"
, getPackageName(),
null
);
intent.setData(uri);
startActivityForResult(intent,
101
);
});
builder.setNegativeButton(
"Cancel"
, (dialog, which) -> {
dialog.cancel();
});
builder.show();
}
}