鸿蒙NEXT开发笔记(二十一)仿抖音快手App的网络动态授权

上一节我们利用滑块组件实现了多张图片的左右轮播特效,在此基础上可以实现多个短视频的上下轮播特效。那么要想正常播放网络视频,还得让App提前获得网络授权才行。鸿蒙系统提供了一种允许应用访问系统资源(例如通讯录)和系统能力(例如访问摄像头、麦克风等)的通用权限访问方式,以此避免系统数据和系统功能被不当使用。
根据授权方式的不同,鸿蒙App的权限类型可分为system_grant(系统授权)和user_grant(用户授权)。如果App声明了system_grant权限,那么系统会在安装App时,会自动把相应权限授予给该应用。但是对于user_grant权限来说,不仅需要App事先声明权限,还要在应用运行时,以弹窗方式请求用户授权。只有用户确认授权,应用才会获得相应权限,从而正常操作相关能力。
system_grant的授权方式比较简单,而user_grant的授权方式比较复杂。就网络访问权限而言,它属于system_grant权限,具体的授权步骤说明如下:
打开App模块的配置文件module.json5,给module节点添加下面的网络权限声明配置:

"requestPermissions":[
  {
    "name" : "ohos.permission.INTERNET"
  }
]

注意requestPermissions节点跟着权限数组,可配置一个或者多个权限,比如ohos.permission.INTERNET表示访问网络权限。由于INTERNET属于系统授权,安全等级比较低,因此只要在module.json5中添加声明就行了,系统会在安装App时自动分配网络权限。
如果是申请user_grant权限,比如麦克风权限,那么不光添加权限声明配置,还要在ETS代码中添加权限检查和权限授予代码,具体的授权步骤说明如下:

1、给module节点添加权限声明配置

对user_grant权限而言,requestPermissions节点不仅要声明权限的名称(name字段),还要声明申请的原因(reason字段),以及该权限的使用场景(usedScene)字段。
其中原因文本要配置到resources/base/element/string.json中,然后以“$string:文本字段名称”的形式引用到reason字段。比如先给string.json补充下面的字符串配置:

{
  "name": "Microphone_reason",
  "value": "麦克风权限"
}

再打开module.json5,在权限声明的name后面添加以下一行reason配置:

    "reason": "$string:Microphone_reason",

至于使用场景的usedScene对象,要求在when字段指定该权限的调用时机,时机类型有两种,分别是inuse(使用时)、always(始终),通常填inuse即可。
综合上述的配置说明,给App申请麦克风权限时,要在module.json5文件的module节点添加下面完整的权限声明语句:

"requestPermissions":[
  {
    "name" : "ohos.permission.MICROPHONE", // 权限名称
    "reason": "$string:Microphone_reason", // 申请原因
    "usedScene": { // 使用场景
      "when":"inuse" // 在使用时授权
    }
  }
]

2、在ETS代码中处理动态授权

打开App模块的入口代码EntryAbility.ets,先在文件开头添加下面的导包语句:

import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit'

再到onWindowStageCreate方法内部调用下面代码,创建授权管理器AtManager:

let atManager = abilityAccessCtrl.createAtManager()

然后通过授权管理器提供的下列方法,分别执行权限的检查、授权等操作。
checkAccessToken:校验应用是否授予了指定权限。第一个参数为目标应用的身份标识,可通过context.applicationInfo.accessTokenId获取。第二个参数为待检查的权限名称数组。
requestPermissionsFromUser:请求拉起权限设置弹框。如果用户拒绝授权,那么调用该接口将无法再次拉起弹框,需要用户在系统设置中手动授予权限;或者在代码中调用requestPermissionOnSetting,请求再次拉起权限设置弹框,从而引导用户正确授权。
requestPermissionOnSetting:请求再次拉起权限设置弹框。
综合上述的配置修改和代码完善,编译运行鸿蒙App,看到权限请求弹窗如下图所示,点击弹窗右下角的确定按钮,即可给App授予录音权限。

下一篇文章会介绍如何使用网络请求库http来调用网络上的http接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值