一、新建权限列表类并录入以下关键代码
新建权限列表类
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()); } }}三、打开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.RequestSystemPermission(); } } 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)手机模拟器运行
运行效果
运行效果
运行效果
