鸿蒙学习-权限

本文章基于SDK(API Version 5)进行开发


权限分类

权限的grantMode是system_grant(非敏感权限),则权限会在当应用安装的时候被自动授予。

权限的grantMode是user_grant(敏感权限),则必须经用户手动授权(用户在弹框中授权或进入权限设置界面授权)才可使用。用户会看到reason字段中填写的理由,来帮助用户决定是否给予授权。


权限申请

开发者需要在config.json文件中的“reqPermissions”字段中声明所需要的权限。

{

"module": {

"reqPermissions": [

            {

                //必须,填写需要使用的权限名称。

                "name":"ohos.permission.CAMERA",

                //可选,当申请的权限为user_grant权限时此字段必填。描述申请权限的原因,目前reason参数对应的功能没有实现,但是华为建议填写

                "reason":"$string:permreason_camera",

                //可选,当申请的权限为user_grant权限时此字段必填。描述权限使用的场景和时机。场景类型有:ability、when(调用时机)。可配置多个ability。目前usedScene参数对应的功能没有实现,但是华为建议填写

                "usedScene":

                {

                    "ability": ["com.mycamera.Ability","com.mycamera.AbilityBackground"],

                       "when":"always"

                }

            },{

            ...

            }

        ]

    }

}


请求权限

if (verifySelfPermission("ohos.permission.CAMERA") != IBundleManager.PERMISSION_GRANTED) {

// 应用未被授予权限

    if (canRequestPermission("ohos.permission.CAMERA")) {

        // 是否可以申请弹框授权(首次申请或者用户未选择禁止且不再提示)

        requestPermissionsFromUser(new String[] {"ohos.permission.CAMERA" } ,1111);

      }else {

        //上次申请权限时用户选择“禁止后不再提示”

        // 显示应用需要权限的理由,提示用户进入设置授权

    }

}else {

// 权限已被授予

}


//在Ability中的onRequestPermissionsFromUserResult权限申请进行回调

@Override

public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions,int[] grantResults) {

    switch (requestCode) {

        case 1111: {

            // 匹配requestPermissions的requestCode

            if (grantResults.length >0

                    && grantResults[0] == IBundleManager.PERMISSION_GRANTED) {

                // 权限被授予

                // 注意:因时间差导致接口权限检查时有无权限,所以对那些因无权限而抛异常的接口进行异常捕获处理

            }else {

                // 权限被拒绝

            }

}

}

}

你可能感兴趣的:(鸿蒙学习-权限)