关键步骤及关键代码
一、新建权限列表类并录入以下关键代码
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());
}
}
}
二、新建公有变量类并录入以下关键代码
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并录入以下代码
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)手机模拟器运行