check permissions with rxPermissions library and open apps settings page
public void checkAllPermissions() {
final String[] permissionsArray = new String[]{
Manifest.permission.CALL_PHONE,
Manifest.permission.READ_CALL_LOG,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.READ_PHONE_STATE};
rxPermissions.request(permissionsArray)
.subscribe(allPermissionsGranted -> {
if (allPermissionsGranted) {
((ArmApplication) this.getApplication()).initLogger(true);
AppConfig.getInstance().loadPreferences();
setIMEI();
} else {
rxPermissions.shouldShowRequestPermissionRationale(LoginActivity.this, permissionsArray)
.subscribe(canAskAgain -> {
if (canAskAgain) {
checkAllPermissions();
} else {
AlertDialog.Builder permDialog = new AlertDialog.Builder(this);
permDialog.setTitle(R.string.permissions_alert_title)
.setMessage(R.string.permissions_alert_message)
.setPositiveButton(R.string.permissions_alert_positive_button, (dialogInterface, i) -> {
checkAllPermissions();
})
.setNeutralButton(R.string.permissions_alert_neutral_button, (dialogInterface, i) -> {
openSettings();
LoginActivity.this.finishAndRemoveTask();
});
permDialog.show();
}
});
}
});
}
private void openSettings() {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(intent);
}