class="hljs-ln-code"> class="hljs-ln-line"> "module": {
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> "reqPermissions": [
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> {
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line"> "name": "ohos.permission.CAMERA",
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> "reason": "$string:permreason_camera",
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> "usedScene":
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> {
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line"> "ability": ["com.mycamera.Ability", "com.mycamera.AbilityBackground"],
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line"> "when": "always"
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line"> }
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line"> },{
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line"> ...
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="14"> class="hljs-ln-code"> class="hljs-ln-line"> }
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="15"> class="hljs-ln-code"> class="hljs-ln-line"> ]
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="16"> class="hljs-ln-code"> class="hljs-ln-line"> }
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="17"> class="hljs-ln-code"> class="hljs-ln-line">}
  • class="hide-preCode-box"> class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    权限申请格式采用数组格式,可支持同时申请多个权限,权限个数最多不能超过1024个。

    class="table-box">

    值说明

    类型

    取值范围

    默认值

    规则约束

    name

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

    字符串

    自定义

    未填写时,解析失败。

    reason

    可选,当申请的权限为user_grant权限时此字段必填。 描述申请权限的原因。

    字符串

    显示文字长度不能超过256个字节。

    user_grant权限必填,否则不允许在应用市场上架。 需做多语种适配。

    usedScene

    可选,当申请的权限为user_grant权限时此字段必填。 描述权限使用的场景和时机。场景类型有:ability、when(调用时机)。可配置多个ability。

    ability:字符串数组 when:字符串

    ability:ability的名称 when:inuse(使用时)、always(始终)

    ability:空 when:inuse

    user_grant权限必填ability,可选填when。

    如果声明使用的权限的grantMode是system_grant,则权限会在当应用安装的时候被自动授予。

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

    说明 对于授权方式为user_grant的权限,每一次执行需要这一权限的操作时,都需要检查自身是否有该权限。当自身具有权限时,才可继续执行,否则应用需要请求用户授予权限。

    自定义权限

    开发者需要在config.json文件中的“defPermissions”字段中自定义所需的权限:

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">{
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line"> "module": {
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> "defPermissions": [
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> {
    5. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line"> "name": "com.myability.permission.MYPERMISSION",
    6. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> "grantMode": "system_grant",
    7. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> "availableScope": ["signature"]
    8. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> }, {
    9. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line"> ...
    10. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line"> }
    11. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line"> ]
    12. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line"> }
    13. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line">}
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    权限定义格式采用数组格式,可支持同时定义多个权限,自定义的权限个数最多不能超过1024个。

    defPermissions权限定义字段说明

    class="table-box">

    值说明

    类型

    取值范围

    默认值

    规则约束

    name

    必填,权限名称。为最大可能避免重名,采用反向域公司名+应用名+权限名组合。

    字符串

    自定义

    第三方应用不允许填写系统存在的权限,否则安装失败。未填写解析失败。权限名长度不能超过256个字符。

    grantMode

    必填,权限授予方式。

    字符串

    user_grant(用户授权)system_grant(系统授权)取值含义请参见:表3。

    system_grant

    未填值或填写了取值范围以外的值时,自动赋予默认值; 不允许第三方应用填写user_grant,填写后会自动赋予默认值。

    availableScope

    选填,权限限制范围。不填则表示此权限对所有应用开放。

    字符串数组

    signatureprivilegedrestricted取值含义请参见:表4。

    填写取值范围以外的值时,权限限制范围不生效。 由于第三方应用并不在restricted的范围内,很少会出现权限定义者不能访问自身定义的权限的情况,所以不允许三方应用填写restricted。

    label

    选填,权限的简短描述,若未填写,则使用到简短描述的地方由权限名取代。

    字符串

    自定义

    需要多语种适配。

    description

    选填,权限的详细描述,若未填写,则使用到详细描述的地方由label取代。

    字符串

    自定义

    需要多语种适配。

    取值含义请参见:表3。 system_grant 未填值或填写了取值范围以外的值时,自动赋予默认值; 不允许第三方应用填写user_grant,填写后会自动赋予默认值。 availableScope 选填,权限限制范围。不填则表示此权限对所有应用开放。 字符串数组

    取值含义请参见:表4。 空 填写取值范围以外的值时,权限限制范围不生效。 由于第三方应用并不在restricted的范围内,很少会出现权限定义者不能访问自身定义的权限的情况,所以不允许三方应用填写restricted。 label 选填,权限的简短描述,若未填写,则使用到简短描述的地方由权限名取代。 字符串 自定义 空 需要多语种适配。 description 选填,权限的详细描述,若未填写,则使用到详细描述的地方由label取代。 字符串 自定义 空 需要多语种适配。

    权限授予方式字段说明

    class="table-box">

    授予方式 (grantMode)

    说明

    自定义权限是否可指定该级别

    取值样例

    system_grant

    在“config.json”里面声明,安装后系统自动授予。

    GET_NETWORK_INFO 、GET_WIFI_INFO

    user_grant

    在“config.json”里面声明,并在使用时动态申请,用户授权后才可使用。

    否,如自定义则强制修改为system_grant。

    CAMERA、MICROPHONE

    权限限制范围字段说明

    class="table-box">

    权限范围 (availableScope)

    说明

    自定义权限是否可指定该级别

    取值样例

    restricted

    需要开发者申请对应证书后才能被使用的特殊权限。

    WRITE_CONTACTS、READ_CONTACTS

    signature

    权限定义方和使用方的签名一致。需在“config.json”里面声明后,由权限管理模块负责签名校验一致后,可使用。

    对应用(或Ability)操作的系统接口上由系统定义权限以及应用自定义的权限。 如:发现某Ability,连接某Ability。

    privileged

    预置在系统版本中的特权应用可申请的权限。

    SET_TIME、MANAGE_USER_STORAGE

    访问权限控制

    Ability的访问权限控制

    在config.json中填写“abilities”的“permissions”字段,即只有拥有该权限的应用可访问此Ability。下面的例子表明只有拥有“ohos.permission.CAMERA”权限的应用可以访问此ability。

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">"abilities": [
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line"> {
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> "name": ".MainAbility",
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> "description": "$string:description_main_ability",
    5. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line"> "icon": "$media:hiworld",
    6. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> "label": "HiCamera",
    7. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> "launchType": "standard",
    8. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> "orientation": "portrait",
    9. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line"> "visible": false,
    10. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line"> "permissions": [
    11. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line"> "ohos.permission.CAMERA"
    12. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line"> ],
    13. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line"> }
    14. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="14"> class="hljs-ln-code"> class="hljs-ln-line">]
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    权限保护字段说明

    class="table-box">

    值说明

    类型

    取值范围

    默认值

    规则约束

    permissions

    选填,权限名称。用以表示此ability受哪个权限保护,即只有拥有此权限的应用可访问此ability。

    字符串数组

    自定义

    目前仅支持填写一个权限名,若填写多个权限名,仅第一个权限名称有效。

    Ability接口的访问权限控制

    在Ability实现中,如需要对特定接口对调用者做访问控制,可在服务侧的接口实现中,主动通过verifyCallingPermission、verifyCallingOrSelfPermission来检查访问者是否拥有所需要的权限。

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">if (verifyCallingPermission("ohos.permission.CAMERA") != IBundleManager.PERMISSION_GRANTED) {
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line"> // 调用者无权限,做错误处理
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">}
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> // 调用者权限校验通过,开始提供服务
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    API接口说明

    应用权限接口说明

    class="table-box">

    接口原型

    接口详细描述

    int verifyPermission(String permissionName, int pid, int uid)

    接口功能:查询指定PID、UID的应用是否已被授予某权限 输入参数:permissionName:权限名;pid:进程id;uid:uid 输出参数:无 返回值: IBundleManager.PERMISSION_DENIED、IBundleManager.PERMISSION_GRANTED

    int verifyCallingPermission(String permissionName)

    接口功能:查询IPC跨进程调用方的进程是否已被授予某权限 输入参数:permissionName:权限名 输出参数:无 返回值: IBundleManager.PERMISSION_DENIED、IBundleManager.PERMISSION_GRANTED

    int verifySelfPermission(String permissionName)

    接口功能:查询自身进程是否已被授予某权限 输入参数:permissionName:权限名 输出参数:无 返回值: IBundleManager.PERMISSION_DENIED、IBundleManager.PERMISSION_GRANTED

    int verifyCallingOrSelfPermission(String permissionName)

    接口功能:当有远端调用检查远端是否有权限,否则检查自身是否拥有权限 输入参数:permissionName:权限名 输出参数:无 返回值: IBundleManager.PERMISSION_DENIED、IBundleManager.PERMISSION_GRANTED

    boolean canRequestPermission(String permissionName)

    接口功能:向系统权限管理模块查询某权限是否不再弹框授权了 输入参数:permissionName:权限名 输出参数:无 返回值:true允许弹框,false不允许弹框

    void requestPermissionsFromUser (String[] permissions, int requestCode)

    接口功能:向系统权限管理模块申请权限(接口可支持一次申请多个。若下一步操作涉及到多个敏感权限,可以这么用,其他情况建议不要这么用。因为弹框还是按权限组一个个去弹框,耗时比较长。用到哪个权限就去申请哪个) 输入参数: permissions:权限名列表;requestCode: 请求应答会带回此编码以匹配本次申请的权限请求 输出参数:无 返回值:无

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

    接口功能:调用requestPermissionsFromUser后的应答接口 输入参数:requestCode:requestPermission中传入的requestCode;permissions:申请的权限名;grantResults:申请权限的结果 输出参数:无 返回值:无

    动态申请权限开发步骤

    在config.json文件中声明所需要的权限。

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">{
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line"> "module": {
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> "reqPermissions": [
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> {
    5. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line"> "name": "ohos.permission.CAMERA",
    6. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> "reason": "$string:permreason_camera",
    7. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> "usedScene": {
    8. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> "ability": ["com.mycamera.Ability", "com.mycamera.AbilityBackground"],
    9. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line"> "when": "always"}
    10. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line"> }, {
    11. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line"> ...
    12. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line"> }
    13. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line"> ]
    14. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="14"> class="hljs-ln-code"> class="hljs-ln-line"> }
    15. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="15"> class="hljs-ln-code"> class="hljs-ln-line">}
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    使用ohos.app.Context.verifySelfPermission接口查询应用是否已被授予该权限。

    使用canRequestPermission查询是否可动态申请。

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">if (verifySelfPermission("ohos.permission.CAMERA") != IBundleManager.PERMISSION_GRANTED) {
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line"> // 应用未被授予权限
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> if (canRequestPermission("ohos.permission.CAMERA")) {
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> // 是否可以申请弹框授权(首次申请或者用户未选择禁止且不再提示)
    5. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line"> requestPermissionsFromUser(
    6. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> new String[] { "ohos.permission.CAMERA" } , MY_PERMISSIONS_REQUEST_CAMERA);
    7. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> } else {
    8. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> // 显示应用需要权限的理由,提示用户进入设置授权
    9. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line"> }
    10. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line">} else {
    11. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line"> // 权限已被授予
    12. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line">}
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    通过重写ohos.aafwk.ability.Ability的回调函数onRequestPermissionsFromUserResult接收授予结果。

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">@Override
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line">public void onRequestPermissionsFromUserResult (int requestCode, String[] permissions, int[] grantResults) {
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> switch (requestCode) {
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> case MY_PERMISSIONS_REQUEST_CAMERA: {
    5. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line"> // 匹配requestPermissions的requestCode
    6. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> if (grantResults.length > 0
    7. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> && grantResults[0] == IBundleManager.PERMISSION_GRANTED) {
    8. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> // 权限被授予
    9. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line"> // 注意:因时间差导致接口权限检查时有无权限,所以对那些因无权限而抛异常的接口进行异常捕获处理
    10. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line"> } else {
    11. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line"> // 权限被拒绝
    12. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line"> }
    13. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line"> return;
    14. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="14"> class="hljs-ln-code"> class="hljs-ln-line"> }
    15. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="15"> class="hljs-ln-code"> class="hljs-ln-line"> }
    16. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="16"> class="hljs-ln-code"> class="hljs-ln-line">}
    class="hide-preCode-box"> class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    应用权限列表

    权限分类

    HarmonyOS根据接口所涉数据的敏感程度或所涉能力的安全威胁影响,定义了不同开放范围与授权方式的权限来保护数据。

    当前权限的开放范围分为:

    应用在使用对应服务的能力或数据时,需要申请对应权限。

    当应用调用服务时,服务会对应用进行权限检查,如果没有对应权限则无法使用该服务。

    敏感权限

    敏感权限的申请需要按照动态申请流程向用户申请授权。

    class="table-box">

    权限分类名称

    权限名

    说明

    位置

    ohos.permission.LOCATION

    允许应用在前台运行时获取位置信息。如果应用在后台运行时也要获取位置信息,则需要同时申请ohos.permission.LOCATION_IN_BACKGROUND权限。

    ohos.permission.LOCATION_IN_BACKGROUND

    允许应用在后台运行时获取位置信息,需要同时申请ohos.permission.LOCATION权限。

    相机

    ohos.permission.CAMERA

    允许应用使用相机拍摄照片和录制视频。

    麦克风

    ohos.permission.MICROPHONE

    允许应用使用麦克风进行录音。

    日历

    ohos.permission.READ_CALENDAR

    允许应用读取日历信息。

    ohos.permission.WRITE_CALENDAR

    允许应用在设备上添加、移除或修改日历活动。

    健身运动

    ohos.permission.ACTIVITY_MOTION

    允许应用读取用户当前的运动状态。

    健康

    ohos.permission.READ_HEALTH_DATA

    允许应用读取用户的健康数据。

    分布式数据管理

    ohos.permission.DISTRIBUTED_DATASYNC

    允许不同设备间的数据交换。

    ohos.permission.DISTRIBUTED_DATA

    允许应用使用分布式数据的能力。

    媒体

    ohos.permission.MEDIA_LOCATION

    允许应用访问用户媒体文件中的地理位置信息。

    ohos.permission.READ_MEDIA

    允许应用读取用户外部存储中的媒体文件信息。

    ohos.permission.WRITE_MEDIA

    允许应用读写用户外部存储中的媒体文件信息。

    非敏感权限

    非敏感权限不涉及用户的敏感数据或危险操作,仅需在config.json中声明,应用安装后即被授权。

    class="table-box">

    权限名

    说明

    ohos.permission.GET_NETWORK_INFO

    允许应用获取数据网络信息。

    ohos.permission.GET_WIFI_INFO

    允许获取WLAN信息。

    ohos.permission.USE_BLUETOOTH

    允许应用查看蓝牙的配置。

    ohos.permission.DISCOVER_BLUETOOTH

    允许应用配置本地蓝牙,并允许其查找远端设备且与之配对连接。

    ohos.permission.SET_NETWORK_INFO

    允许应用控制数据网络。

    ohos.permission.SET_WIFI_INFO

    允许配置WLAN设备。

    ohos.permission.SPREAD_STATUS_BAR

    允许应用以缩略图方式呈现在状态栏。

    ohos.permission.INTERNET

    允许使用网络socket。

    ohos.permission.MODIFY_AUDIO_SETTINGS

    允许应用程序修改音频设置。

    ohos.permission.RECEIVER_STARTUP_COMPLETED

    允许应用接收设备启动完成广播。

    ohos.permission.RUNNING_LOCK

    允许申请休眠运行锁,并执行相关操作。

    ohos.permission.ACCESS_BIOMETRIC

    允许应用使用生物识别能力进行身份认证。

    ohos.permission.RCV_NFC_TRANSACTION_EVENT

    允许应用接收卡模拟交易事件。

    ohos.permission.COMMONEVENT_STICKY

    允许发布粘性公共事件的权限。

    ohos.permission.SYSTEM_FLOAT_WINDOW

    提供显示悬浮窗的能力。

    ohos.permission.VIBRATE

    允许应用程序使用马达。

    ohos.permission.USE_TRUSTCIRCLE_MANAGER

    允许调用设备间认证能力。

    ohos.permission.USE_WHOLE_SCREEN

    允许通知携带一个全屏IntentAgent。

    ohos.permission.SET_WALLPAPER

    允许设置静态壁纸。

    ohos.permission.SET_WALLPAPER_DIMENSION

    允许设置壁纸尺寸。

    ohos.permission.REARRANGE_MISSIONS

    允许调整任务栈。

    ohos.permission.CLEAN_BACKGROUND_PROCESSES

    允许根据包名清理相关后台进程。

    ohos.permission.KEEP_BACKGROUND_RUNNING

    允许Service Ability在后台继续运行。

    ohos.permission.GET_BUNDLE_INFO

    查询其他应用的信息。

    ohos.permission.ACCELEROMETER

    允许应用程序读取加速度传感器的数据。

    ohos.permission.GYROSCOPE

    允许应用程序读取陀螺仪传感器的数据。

    ohos.permission.MULTIMODAL_INTERACTIVE

    允许应用订阅语音或手势事件。

    ohos.permission.radio.ACCESS_FM_AM

    允许用户获取收音机相关服务。

    ohos.permission.NFC_TAG

    允许应用读写Tag卡片。

    ohos.permission.NFC_CARD_EMULATION

    允许应用实现卡模拟功能。

    受限开放的权限

    受限开放的权限通常是不允许三方应用申请的。如果有特殊场景需要使用,请提供相关申请材料到应用市场申请相应权限证书。如果应用未申请相应的权限证书,却试图在config.json文件中声明此类权限,将会导致应用安装失败。另外,由于此类权限涉及到用户敏感数据或危险操作,当应用申请到权限证书后,还需按照动态申请权限的流程向用户申请授权。

    class="table-box">

    权限分类名称

    典型场景

    权限名

    说明

    通讯录

    社交、通讯、备份和恢复用户信息、电话拦截等

    ohos.permission.READ_CONTACTS

    允许应用读取联系人数据。

    通讯、备份和恢复用户信息等

    ohos.permission.WRITE_CONTACTS

    允许应用添加、移除和更改联系人数据。


    最后,为了能让大家更好的去学习提升鸿蒙 (Harmony OS) 开发技术,小编连夜整理了一份30个G纯血版学习资料(含视频电子书学习文档等)以及一份在Github上持续爆火霸榜的《纯血版华为鸿蒙 (Harmony OS)开发手册》(共计890页),希望对大家有所帮助。

    纯血版鸿蒙 HarmonyOS 4.0 视频学习资料

     需要以上视频学习资料小伙伴

    请点击→纯血版全套鸿蒙HarmonyOS学习资料


    《纯血版华为鸿蒙 (Harmony OS)开发手册》

    这份手册涵盖了当前鸿蒙 (Harmony OS) 开发技术必掌握的核心知识点

    纯血版鸿蒙 (Harmony OS)开发手册部分精彩内容

    HarmonyOS 概念:

    如何快速入门?


    开发基础知识: 

    基于ArkTS 开发:

    获取以上文中提到的这份纯血版鸿蒙 (Harmony OS) 开发资料的小伙伴 

    请点击→纯血版全套鸿蒙HarmonyOS学习资料


    🚀写在最后

    data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/shudaoshanQAQ/article/details/135758091","extend1":"pc","ab":"new"}">>
    注:本文转载自blog.csdn.net的蜀道山QAQ的文章"https://blog.csdn.net/shudaoshanQAQ/article/details/135758091"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
    复制链接

    评论记录:

    未查询到任何数据!