参考:
1、https://blog.csdn.net/weixin_56291477/article/details/122613092
2、http://t.zoukankan.com/bimingcong-p-10328235.html
步骤1:定义申请权限的列表
// 要申请的权限
private static String[] permissions = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
};
步骤2:进行权限申请,此时出现弹窗用户是否同意获取,未同意则会弹窗警告需要用户手动设置权限。
private void requestPermiision(){
int i = ContextCompat.checkSelfPermission(this.getApplicationContext(), permissions[0]);
int j = ContextCompat.checkSelfPermission(this.getApplicationContext(), permissions[1]);
if (i != PackageManager.PERMISSION_GRANTED || j != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, permissions, 321);
if(Utils.isHarmonyOs()){ //判断是否是鸿蒙系统,权限弹窗有些不一样
}else{
if(ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0]) && ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[1])){
}else{
}
}
}else{
//自己的操作
requestCoverImg();
}
}
步骤3:获取权限的回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
ArrayList<String> banList = new ArrayList<>();//禁止列表
if (requestCode == 321) {
int i = 0;
for(String a : permissions){
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
banList.add(a);
} else {
}
i++;
}
//优先对禁止列表进行判断
if(banList.size()>0){//告知该权限作用,要求手动授予权限
new AlertDialog.Builder(mActivity)
.setTitle("警告")
.setMessage("需要读写手机存储权限才可以正常使用该功能,您已拒绝获得该权限。\n如果需要重新授权,您可以点击“允许”按钮进入系统设置进行授权")
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setPositiveButton("允许", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
XXPermissions.startPermissionActivity(mActivity);
}
}).show();
}
}
/**
* 是否是鸿蒙系统
* */
public static boolean isHarmonyOs(){
try {
Class<?> buildExClass = Class.forName("com.huawei.system.BuildEx");
Object osBrand = buildExClass.getMethod("getOsBrand").invoke(buildExClass);
return "harmony".equalsIgnoreCase(osBrand.toString());
}catch (Throwable e){
return false;
}
}
网友评论