HarmonyOS开发权限申请
可分为一般权限申请和动态权限申请,我们下面分别来介绍:
1.一般权限申请
开发者打开新建项目,在config.json文件中的“reqPermissions”字段中声明所需要的权限。
config.json 的位置如下图:
“reqPermissions”字段的值,是一个对象描述的一个权利,其中可以描述一个对象的多个权限。
2.动态权限申请
在config.json文件中声明所需要的权限。
使用ohos.app.Context.verifySelfmission接口查询应用是否已被授予该权限。
(1).如果已被授权,可以结束授权申请流程。
(2)如果希望授权,继续执行下一步。
使用canRequestPermission查询是否可动态申请。
(1).如果不可动态申请,说明已被用户或系统永久禁止授权,可以结束授权申请流程。
(2).如果可以动态申请,使用requestPermissionFromUser动态申请权限。
if (verifySelfPermission("ohos.permission.CAMERA") != IBundleManager.PERMISSION_GRANTED) {
if (canRequestPermission("ohos.permission.CAMERA")) {
requestPermissionsFromUser(
new String[] { "ohos.permission.CAMERA" } , MY_PERMISSIONS_REQUEST_CAMERA);
} else {
}
} else {
}
写一个哦os的能力
@Override
public void onRequestPermissionsFromUserResult (int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_CAMERA: {
// 匹配requestPermissions的requestCode
if (grantResults.length > 0
&& grantResults[0] == IBundleManager.PERMISSION_GRANTED) {
// 权限被授予
// 注意:因时间差导致接口权限检查时有无权限,所以对那些因无权限而抛异常的接口进行异常捕获处理
} else {
// 权限被拒绝
}
return;
}
}
}
private void requestPermissions() {
String[] permissions = {SystemPermission.CAMERA,SystemPermission.LOCATION};
ArrayList<String> needCheckPermissions = new ArrayList<>();
for (String permission : permissions) {
if (verifySelfPermission(permission) != IBundleManager.PERMISSION_GRANTED && canRequestPermission(permission)) {
needCheckPermissions.add(permission);
}
}
String[] needPermissions = needCheckPermissions.toArray(new String[0]);
requestPermissionsFromUser(needPermissions, 100);
}
原作者:PengLei
|