您的位置 首页 java

鸿蒙(Harmony)申请所有敏感权限

关键步骤及关键代码

一、新建权限列表类并录入以下关键代码

新建权限列表类

 public class PermissionList {
    public Context context;
    public ArrayList<String> PermissionArrayList;//敏感权限列表
    public int PermissionSize;//敏感权限列表大小
    public String[] PermissionArray;//敏感权限数组
    public  static  final HiLogLabel hiLogLabel=new HiLogLabel(HiLog.LOG_APP,0x00201,"错误");

    public PermissionList(Context ParameterContext) {
        super();
        this.context=ParameterContext;
    }

    public  void  AddPermission(){
        try{
            PermissionArrayList=new ArrayList<>();
            //允许应用在前台运行时获取位置信息。如果应用在后台运行时也要获取位置信息,则需要同时申请ohos.permission.LOCATION_IN_BACKGROUND权限。
            PermissionArrayList.add(SystemPermission.LOCATION);
            //允许应用在后台运行时获取位置信息,需要同时申请ohos.permission.LOCATION权限。
            PermissionArrayList.add(SystemPermission.LOCATION_IN_BACKGROUND);

            PermissionArrayList.add(SystemPermission.CAMERA);//允许应用使用相机拍摄照片和录制视频。

            PermissionArrayList.add(SystemPermission.MICROPHONE);//允许应用使用麦克风进行录音。

            PermissionArrayList.add(SystemPermission.READ_CALENDAR);//允许应用读取日历信息。
            PermissionArrayList.add(SystemPermission.WRITE_CALENDAR);//允许应用在设备上添加、移除或修改日历活动。

            PermissionArrayList.add(SystemPermission.ACTIVITY_MOTION);//允许应用读取用户当前的运动状态。

            PermissionArrayList.add(SystemPermission.READ_HEALTH_DATA);//允许应用读取用户的健康数据。

            PermissionArrayList.add(SystemPermission.DISTRIBUTED_DATASYNC);//允许不同设备间的数据交换。
            PermissionArrayList.add(SystemPermission.DISTRIBUTED_DATA);//允许应用使用分布式数据的能力。

            PermissionArrayList.add(SystemPermission.MEDIA_LOCATION);//允许应用访问用户媒体文件中的地理位置信息。
            PermissionArrayList.add(SystemPermission.READ_MEDIA);//允许应用读取用户外部存储中的媒体文件信息
            PermissionArrayList.add(SystemPermission.WRITE_MEDIA);//允许应用读写用户外部存储中的媒体文件信息

            PermissionSize=PermissionArrayList.size();
            PermissionArray=PermissionArrayList.toArray(new String[PermissionSize]);
        }catch ( Exception  exception){
            HiLog.error(hiLogLabel,exception.toString());
        }
    }
}  

二、新建公有变量类并录入以下关键代码

新建JAVA类

 public class PublicVariable {
    public PermissionList permissionList;
    public ArrayList<String> ObjectivePermissionArrayList;//目标权限列表
    public String[] ObjectivePermissionArray;//目标权限数组
    public int ObjectivePermissionArraySize;//目标权限数组大小
    public ArrayList<String> RejectPermissionList;//拒绝的权限列表
    public int RejectPermissionSize;//拒绝的权限列表大小
    public String[] RejectPermissionArray;//拒绝的权限数组
    public PublicVariable(Context context) {
        super();
        ObjectivePermissionArrayList=new ArrayList<>();
        RejectPermissionList=new ArrayList<>();
        permissionList=new PermissionList(context);
    }
}
  

三、打开Ability并录入以下代码

打开MainAbility

 public class MainAbility  extends  Ability {
    public static final HiLogLabel hiLogLabel=new HiLogLabel(HiLog.LOG_APP,0x00201,"错误");
    PublicVariable publicVariable =new PublicVariable(this);

    @ Override 
    public void onStart( Intent  intent) {
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());
        publicVariable.permissionList.AddPermission();
        this.AddObjectivePermissionArrayList();
        if (publicVariable.ObjectivePermissionArrayList.isEmpty()){
            //已经被授予全部敏感权限
        }else {
            this. request SystemPermission();
        }
    }

    public void AddObjectivePermissionArrayList(){
        for (int i = 0; i< publicVariable.permissionList.PermissionArray.length; i++){
            try {
                //verifySelfPermission:查询自身进程是否已被授予某权限
                //IBundleManager:获取与应用程序捆绑包有关的信息
                //PERMISSION_GRANTED:表示已向应用程序授予特定权限
                if (this.verifySelfPermission(publicVariable.permissionList.PermissionArray[i])!= IBundleManager.PERMISSION_GRANTED){
                    publicVariable.ObjectivePermissionArrayList.add(publicVariable.permissionList.PermissionArray[i]);
                }else {
                    //已经被授予该敏感权限
                }
            }catch (Exception exception){
                HiLog.error(hiLogLabel,exception.toString());
            }
        }
        publicVariable.ObjectivePermissionArraySize= publicVariable.ObjectivePermissionArrayList.size();
        publicVariable.ObjectivePermissionArray= publicVariable.ObjectivePermissionArrayList.toArray(new String[publicVariable.ObjectivePermissionArraySize]);
    }

    public void RequestSystemPermission(){
        for (int i = 0; i< publicVariable.ObjectivePermissionArray.length; i++){
            //canRequestPermission:向系统权限管理模块查询某权限是否不再弹框授权了
            if (this.canRequestPermission(publicVariable.ObjectivePermissionArray[i])){
                this.requestPermissionsFromUser(publicVariable.ObjectivePermissionArray,101);
            }else {
                //显示应用需要权限的理由,提示用户进入设置授权
                publicVariable.RejectPermissionList.add(publicVariable.ObjectivePermissionArray[i]);
            }
        }
        publicVariable.RejectPermissionSize= publicVariable.RejectPermissionList.size();
        publicVariable.RejectPermissionArray= publicVariable.RejectPermissionList.toArray(new String[publicVariable.RejectPermissionSize]);

        for (int i = 0; i< publicVariable.RejectPermissionArray.length; i++){
            //以下权限被禁止,APP使用将受限,请到手机设置界面进行授权。
        }

    }

    @Override
    //onRequestPermissionsFromUserResult:调用requestPermissionsFromUser后的应答接口
    //requestCode:requestPermission中传入的requestCode
    //permissions:申请的权限名
    //grantResults:申请权限的结果
    public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) {
        //匹配requestPermissions的requestCode
        if (requestCode==101){
            for (int i=0; i<grantResults.length; i++){
                try {
                    if (grantResults[i]==IBundleManager.PERMISSION_GRANTED){
                        //权限被授予
                        //注意:因时间差导致接口权限检查时有无权限,所以对那些因无权限而抛异常的接口进行异常捕获处理
                    }else {
                        //权限被拒绝
                    }
                }catch (Exception exception){
                    HiLog.error(hiLogLabel,exception.toString());
                }
            }
        }
    }  

四、打开鸿蒙(Harmony)手机模拟器运行

运行效果

运行效果

运行效果

文章来源:智云一二三科技

文章标题:鸿蒙(Harmony)申请所有敏感权限

文章地址:https://www.zhihuclub.com/193612.shtml

关于作者: 智云科技

热门文章

网站地图