android 权限判断

1.SplashActivity

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if (Build.VERSION.SDK_INT >= 23) {//6.0才用动态权限

initPermission();

}

}

--------------------------------------------------------------------

//申请两个权限,录音和文件读写

//1、首先声明一个数组permissions,将需要的权限都放在里面

String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO,

Manifest.permission.READ_EXTERNAL_STORAGE};

//2、创建一个mPermissionList,逐个判断哪些权限未授予,未授予的权限存储到mPerrrmissionList中

List<String> mPermissionList = new ArrayList<>();

private final int mRequestCode = 100;//权限请求码

//权限判断和申请

private void initPermission() {

mPermissionList.clear();//清空没有通过的权限

//逐个判断你要的权限是否已经通过

for (int i = 0; i < permissions.length; i++) {

if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {

mPermissionList.add(permissions[i]);//添加还未授予的权限

}

}

//申请权限

if (mPermissionList.size() > 0) {//有权限没有通过,需要申请

ActivityCompat.requestPermissions(this, permissions, mRequestCode);

}else{

//说明权限都已经通过

}

}

//请求权限后回调的方法

//参数: requestCode 是我们自己定义的权限请求码

//参数: permissions 是我们请求的权限名称数组

//参数: grantResults 是我们在弹出页面后是否允许权限的标识数组,数组的长度对应的是权限名称数组的长度,数组的数据0表示允许权限,-1表示我们点击了禁止权限

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,

@NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

boolean hasPermissionDismiss = false;//有权限没有通过

if (mRequestCode == requestCode) {

for (int i = 0; i < grantResults.length; i++) {

if (grantResults[i] == -1) {

hasPermissionDismiss = true;

}

}

//如果有权限没有被允许

if (hasPermissionDismiss) {

showPermissionDialog();//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问

}else{

//全部权限通过,进行下一步操作

}

}

}

--------------------------------------------------------------------

private void showPermissionDialog(){

AlertDialog.Builder builder = new AlertDialog.Builder(SplashActivity.this);

builder.setTitle("权限设置");

builder.setMessage("是否开启权限?");

builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

goIntentSetting();

finish();

}

});

builder.setNeutralButton("取消", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

finish();

}

});

builder.show();

}

--------------------------------------------------------------------

private void goIntentSetting() {

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts("package", SplashActivity.this.getPackageName(), null);

intent.setData(uri);

try {

SplashActivity.this.startActivity(intent);

} catch (Exception e) {

e.printStackTrace();

}

}

猜你喜欢

转载自blog.csdn.net/cao2884388/article/details/105136907