import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
// 申请权限
private final int REQUEST_PERMISSION = 666;
private boolean gotoAppDetail = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 判断系统版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 申请权限
requestPermission();
} else {
// 初始化
onInit();
}
}
/**
* 申请权限
*/
private void requestPermission() {
// 检查权限
String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE};
List<String> checkPermissions = new ArrayList<>();
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
checkPermissions.add(permission);
}
}
if (checkPermissions.size() > 0) {
// 申请权限
ActivityCompat.requestPermissions(this, checkPermissions.toArray(new String[0]), REQUEST_PERMISSION);
} else {
// 初始化
onInit();
}
}
/**
* 申请权限回调
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_PERMISSION) {
int flag = 0;
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
flag = 1;
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) {
flag = 2;
}
break;
}
}
if (flag == 0) {
// 初始化
onInit();
} else if (flag == 1) {
new AlertDialog.Builder(this).setTitle("提示").setMessage("请允许所有权限!").setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 申请权限
requestPermission();
}
}).show();
} else {
new AlertDialog.Builder(this).setTitle("提示").setMessage("请手动允许所有权限!").setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
gotoAppDetail = true;
// 跳转到应用详情界面
gotoAppDetailIntent(MainActivity.this);
}
}).show();
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
/**
* 跳转到应用详情界面
*/
private void gotoAppDetailIntent(Activity activity) {
Intent intent = new Intent();
intent.setAction(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + activity.getPackageName()));
activity.startActivity(intent);
}
@Override
protected void onRestart() {
super.onRestart();
// 跳转到应用详情界面返回
if (gotoAppDetail) {
gotoAppDetail = false;
// 申请权限
requestPermission();
}
}
/**
* 初始化
*/
private void onInit() {
}
}
参考链接:
安卓跳转到应用信息界面(用于方便用户打开权限)
Android 6.0运行时权限勾选不再询问后该如何处理?