Сначала проверьте, какие разрешения вам нужны.
int rc1 = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
int rc2 = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int rc3 = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
int rc4 = ActivityCompat.checkSelfPermission(this, Manifest.permission.INTERNET);
if (rc1 == PackageManager.PERMISSION_GRANTED &&
rc2 == PackageManager.PERMISSION_GRANTED &&
rc3 == PackageManager.PERMISSION_GRANTED &&
rc4 == PackageManager.PERMISSION_GRANTED) {
allGoodProceed();
} else {
requestPermission();
}
, затем вызовите метод requestPermission
.
private void requestPermission() {
final String[] permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA,
Manifest.permission.INTERNET};
boolean isPermissionDeniedPermanent = false;
for (int i = 0, len = permissions.length; i < len; i++) {
String permission = permissions[i];
if (ActivityCompat.checkSelfPermission(this, permissions[i]) == PackageManager.PERMISSION_DENIED) {
// user rejected the permission
boolean showRationale = shouldShowRequestPermissionRationale(permission);
if (showRationale) {
isPermissionDeniedPermanent = showRationale;
}
}
}
if (isPermissionDeniedPermanent) {
showPermissionsDialog();
} else {
if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CAMERA)) {
ActivityCompat.requestPermissions(this, permissions, HANDLE_STORAGE_PERMISSION);
}
}
}
Кроме того, переопределите onRequestPermissionsResult
метод для проверки результатов разрешений.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean isSomePermissionsMissing = false;
for (int i = 0, len = permissions.length; i < len; i++) {
if (ActivityCompat.checkSelfPermission(this, permissions[i]) == PackageManager.PERMISSION_DENIED) {
isSomePermissionsMissing = true;
}
}
if (isSomePermissionsMissing) {
showPermissionsDialog();
} else {
//all good proceed...
}
}
private void showPermissionsDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Action required").setMessage("To proceed you have to grant some permissions");
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog alertDialog=builder.create();
alertDialog.show();
}
Вы можете добавить разрешения, которые нужно проверить, прежде чем продолжить, как вам нужно. Пожалуйста, вернитесь назад, если это разрешит ваш запрос.