Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
16bea3fa
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
16bea3fa
编写于
3月 06, 2023
作者:
O
openharmony_ci
提交者:
Gitee
3月 06, 2023
浏览文件
操作
浏览文件
下载
差异文件
!15433 修复一个图片问题
Merge pull request !15433 from zyjhandsome/master
上级
bc4404c8
8d659fc3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
132 addition
and
56 deletion
+132
-56
zh-cn/application-dev/application-models/ability-startup-with-implicit-want.md
.../application-models/ability-startup-with-implicit-want.md
+1
-1
zh-cn/application-dev/quick-start/module-configuration-file.md
.../application-dev/quick-start/module-configuration-file.md
+13
-15
zh-cn/application-dev/security/accesstoken-guidelines.md
zh-cn/application-dev/security/accesstoken-guidelines.md
+118
-40
未找到文件。
zh-cn/application-dev/application-models/ability-startup-with-implicit-want.md
浏览文件 @
16bea3fa
...
...
@@ -76,4 +76,4 @@ function implicitStartAbility() {
4.
调用方传入的want参数的type不为空,待匹配Ability的skills配置中的type不为空且包含调用方传入的want参数的type,type匹配成功。
当有多个匹配应用时,会被应用选择器展示给用户进行选择。 示意效果如下图所示。


zh-cn/application-dev/quick-start/module-configuration-file.md
浏览文件 @
16bea3fa
...
...
@@ -75,11 +75,11 @@ module.json5配置文件包含以下标签。
| type | 标识当前Module的类型。类型有两种,分别:
<br/>
-
entry:应用的主模块。
<br/>
-
feature:应用的动态特性模块。 | 字符串 | 该标签不可缺省。 |
| srcEntry | 标识当前Module所对应的代码路径,标签值为字符串(最长为127字节)。 | 字符串 | 该标签可缺省,缺省值为空。 |
| description | 标识当前Module的描述信息,标签值是字符串类型(最长255字节)或对描述内容的字符串资源索引。 | 字符串 | 该标签可缺省,缺省值为空。 |
| process | 标识当前Module的进程名,标签值为字符串类型(最长为31个字节)。如果在HAP标签下配置了process,该应用的所有UIAbility、DataShareExtensionAbility、ServiceExtensionAbility都运行在该进程中。
<br/>
**说明:**
<br/>
-
仅支持系统应用配置,三方应用配置不生效。 | 字符串 | 可缺省,缺省为app.json5文件下app标签下的bundleName。 |
| process | 标识当前Module的进程名,标签值为字符串类型(最长为31个字节)。如果在HAP标签下配置了process,该应用的所有UIAbility、DataShareExtensionAbility、ServiceExtensionAbility都运行在该进程中。
<br/>
>
**说明:**
<br/>
>
仅支持系统应用配置,三方应用配置不生效。 | 字符串 | 可缺省,缺省为app.json5文件下app标签下的bundleName。 |
| mainElement | 标识当前Module的入口UIAbility名称或者ExtensionAbility名称。标签最大字节长度为255。 | 字符串 | 该标签可缺省,缺省值为空。 |
|
[
deviceTypes
](
#devicetypes标签
)
| 标识当前Module可以运行在哪类设备上,标签值采用字符串数组的表示。 | 字符串数组 | 该标签不可缺省,可以为空值。 |
| deliveryWithInstall | 标识当前Module是否在用户主动安装的时候安装,表示该Module对应的HAP是否跟随应用一起安装。
<br/>
-
true:主动安装时安装。
<br/>
-
false:主动安装时不安装。 | 布尔值 | 该标签不可缺省。 |
| installationFree | 标识当前Module是否支持免安装特性。
<br/>
-
true:表示支持免安装特性,且符合免安装约束。
<br/>
-
false:表示不支持免安装特性。
<br/>
**说明:**
<br/>
- 当应用的entry类型Module的该字段配置为true时,该应用的feature类型的该字段也需要配置为true。
<br/>
-
当应用的entry类型Module的该字段配置为false时,该应用的feature类型的该字段根据业务需求配置true或false。 | 布尔值 | 该标签不可缺省。 |
| installationFree | 标识当前Module是否支持免安装特性。
<br/>
-
true:表示支持免安装特性,且符合免安装约束。
<br/>
-
false:表示不支持免安装特性。
<br/>
>
**说明:**
<br/>
> 当应用的entry类型Module的该字段配置为true时,该应用的feature类型的该字段也需要配置为true。
<br/>
>
当应用的entry类型Module的该字段配置为false时,该应用的feature类型的该字段根据业务需求配置true或false。 | 布尔值 | 该标签不可缺省。 |
| virtualMachine | 标识当前Module运行的目标虚拟机类型,供云端分发使用,如应用市场和分发中心。
<br/>
该标签值为字符串。如果目标虚拟机类型为ArkTS引擎,则其值为“ark+版本号”。 | 字符串 | 该标签由IDE构建HAP的时候自动插入。 |
|
[
pages
](
#pages标签
)
| 标识当前Module的profile资源,用于列举每个页面信息。该标签最大长度为255个字节。 | 字符串 | 在有UIAbility的场景下,该标签不可缺省。 |
|
[
metadata
](
#metadata标签
)
| 标识当前Module的自定义元信息,标签值为数组类型,只对当前Module、UIAbility、ExtensionAbility生效。 | 对象数组 | 该标签可缺省,缺省值为空。 |
...
...
@@ -150,7 +150,7 @@ deviceTypes示例:
该标签标识HAP的自定义元信息,标签值为数组类型,包含name,value,resource三个子标签。
**表3**
**metadata标签说明**
**表3**
**metadata标签说明**
| 属性名称 | 含义 | 数据类型 | 是否可缺省 |
| -------- | -------- | -------- | -------- |
...
...
@@ -280,14 +280,14 @@ OpenHarmony系统对无图标应用严格管控。如果HAP中没有配置启动
| removeMissionAfterTerminate | 标识当前UIAbility组件销毁后是否从任务列表中移除任务,为布尔类型:
<br/>
-
true表示销毁后移除任务。
<br/>
-
false表示销毁后不移除任务。 | 布尔值 | 该标签可缺省,缺省值为false。 |
| orientation | 标识当前UIAbility组件启动时的方向。该方向的取值范围包括:
<br/>
-
unspecified:未指定方向,由系统自动判断显示方向。
<br/>
-
landscape:横屏。
<br/>
-
portrait:竖屏。
<br/>
-
landscape_inverted:反向横屏。
<br/>
-
portrait_inverted:反向竖屏。
<br/>
-
auto_rotation:随传感器旋转。
<br/>
-
auto_rotation_landscape:传感器横屏旋转,包括了横屏和反向横屏。
<br/>
-
auto_rotation_portrait:传感器竖屏旋转,包括了竖屏和反向竖屏。
<br/>
-
auto_rotation_restricted:传感器开关打开,方向可随传感器旋转。
<br/>
-
auto_rotation_landscape_restricted:传感器开关打开,方向可随传感器旋转为横屏,
包括了横屏和反向横屏。
<br/>
-
auto_rotation_portrait_restricted:传感器开关打开,方向随可传感器旋转为竖屏,
包括了横屏和反向横屏。
<br/>
-
locked:传感器开关关闭,方向锁定。 | 字符串 | 该标签可缺省,缺省值为unspecified。 |
| supportWindowMode | 标识当前UIAbility组件所支持的窗口模式,包含:
<br/>
-
fullscreen:全屏模式。
<br/>
-
split:分屏模式。
<br/>
-
floating:悬浮窗模式。 | 字符串数组 | 该标签可缺省,缺省值为
<br/>
["fullscreen",
"split",
"floating"]。 |
| priority | 标识当前UIAbility组件的优先级
,仅支持系统应用配置,三方应用配置不生效。
[
隐式查询
](
../application-models/explicit-implicit-want-mappings.md
)
时,优先级越高,UIAbility在返回列表越靠前。该标签取值为integer类型,取值范围0-10。数值越大,优先级越高
。 | 数值 | 该标签可缺省,缺省值为0。 |
| priority | 标识当前UIAbility组件的优先级
。
[
隐式查询
](
../application-models/explicit-implicit-want-mappings.md
)
时,优先级越高,UIAbility在返回列表越靠前。该标签取值为integer类型,取值范围0-10。数值越大,优先级越高。
<br/>
>
**说明:**
<br/>
> 仅支持系统应用配置,三方应用配置不生效
。 | 数值 | 该标签可缺省,缺省值为0。 |
| maxWindowRatio | 标识当前UIAbility组件支持的最大的宽高比。该标签最小取值为0。 | 数值 | 该标签可缺省,缺省值为平台支持的最大的宽高比。 |
| minWindowRatio | 标识当前UIAbility组件支持的最小的宽高比。该标签最小取值为0。 | 数值 | 该标签可缺省,缺省值为平台支持的最小的宽高比。 |
| maxWindowWidth | 标识当前UIAbility组件支持的最大的窗口宽度,宽度单位为vp。该标签最小取值为0,但不能小于minWindowWidth;最大取值不能超过平台支持的最大窗口宽度。窗口尺寸可以参考:
[
约束与限制
](
../windowmanager/window-overview.md#约束与限制
)
。 | 数值 | 该标签可缺省,缺省值为平台支持的最大的窗口宽度。 |
| minWindowWidth | 标识当前UIAbility组件支持的最小的窗口宽度,
宽度单位为vp。该标签最小取值为0,但不能小于平台支持的最小窗口宽度;最大取值不能大于maxWindowWidth。窗口尺寸可以参考:
[
约束与限制
](
../windowmanager/window-overview.md#约束与限制
)
。 | 数值 | 该标签可缺省,缺省值为平台支持的最小的窗口宽度。 |
| maxWindowHeight | 标识当前UIAbility组件支持的最大的窗口高度,
高度单位为vp。该标签最小取值为0,但不能小于minWindowHeight;最大取值不能超过平台支持的最大窗口高度。 窗口尺寸可以参考:
[
约束与限制
](
../windowmanager/window-overview.md#约束与限制
)
。| 数值 | 该标签可缺省,缺省值为平台支持的最大的窗口高度。 |
| minWindowHeight | 标识当前UIAbility组件支持的最小的窗口高度,
高度单位为vp。该标签最小取值为0,但不能小于平台支持的最小窗口高度;最大取值不能大于maxWindowHeight。窗口尺寸可以参考:
[
约束与限制
](
../windowmanager/window-overview.md#约束与限制
)
。| 数值 | 该标签可缺省,缺省值为平台支持的最小的窗口高度。 |
| excludeFromMissions | 标识当前UIAbility组件是否在最近任务列表中显示。
<br/>
-
true:表示不在任务列表中显示。
<br/>
-
false:表示在任务列表中显示。
<br/>
**说明:**
<br/>
-
仅支持系统应用配置,三方应用配置不生效。 | 布尔值 | 该标签可缺省,缺省值为false。 |
| excludeFromMissions | 标识当前UIAbility组件是否在最近任务列表中显示。
<br/>
-
true:表示不在任务列表中显示。
<br/>
-
false:表示在任务列表中显示。
<br/>
>
**说明:**
<br/>
>
仅支持系统应用配置,三方应用配置不生效。 | 布尔值 | 该标签可缺省,缺省值为false。 |
| recoverable | 标识当前是否支持在检测到应用故障后,恢复到应用原界面。
<br/>
-
true:支持检测到出现故障后,恢复到原界面。
<br/>
-
false:不支持检测到出现故障后,恢复到原界面。 | 布尔值 | 该标签可缺省,缺省值为false。 |
abilities示例:
...
...
@@ -424,8 +424,6 @@ skills示例:
12.
uri = 'http://exampleap.com:8080/path' 可以匹配 配置1
<br>
13.
uri = 'http://example.com:9180/path' 可以匹配 配置1 配置2
<br>
14.
uri = 'http://example.com:8080/path' 可以匹配 配置1 配置2 配置3
<br>
## extensionAbilities标签
...
...
@@ -439,11 +437,11 @@ skills示例:
| srcEntry | 标识当前ExtensionAbility组件所对应的代码路径,标签值最大长度为127字节。 | 字符串 | 该标签不可缺省。 |
| description | 标识当前ExtensionAbility组件的描述,标签值最大长度为255字节,标签也可以是描述内容的资源索引,用于支持多语言。 | 字符串 | 该标签可缺省,缺省值为空。 |
| icon | 标识当前ExtensionAbility组件的图标,标签值为资源文件的索引。如果ExtensionAbility组件被配置为MainElement,该标签必须配置。 | 字符串 | 该标签可缺省,缺省值为空。 |
| label | 标识当前ExtensionAbility组件对用户显示的名称,标签值配置为该名称的资源索引以支持多语言。
<br/>
**说明:**
<br/>
-
如果ExtensionAbility被配置当前Module的mainElement时,该标签必须配置,且应用内唯一。 | 字符串 | 该标签不可缺省。 |
| type | 标识当前ExtensionAbility组件的类型,取值为:
<br/>
-
form:卡片的ExtensionAbility。
<br/>
-
workScheduler:延时任务的ExtensionAbility。
<br/>
-
inputMethod:输入法的ExtensionAbility。
<br/>
-
service:后台运行的service组件。
<br/>
-
accessibility:辅助能力的ExtensionAbility。
<br/>
-
dataShare:数据共享的ExtensionAbility。
<br/>
-
fileShare:文件共享的ExtensionAbility。
<br/>
-
staticSubscriber:静态广播的ExtensionAbility。
<br/>
-
wallpaper:壁纸的ExtensionAbility。
<br/>
-
backup:数据备份的ExtensionAbility。
<br/>
-
window:该ExtensionAbility会在启动过程中创建一个window,为开发者提供界面开发。开发者开发出来的界面将通过abilityComponent控件组合到其他应用的窗口中。
<br/>
-
thumbnail:获取文件缩略图的ExtensionAbility,开发者可以对自定义文件类型的文件提供缩略。
<br/>
-
preview:该ExtensionAbility会将文件解析后在一个窗口中显示,开发者可以通过将此窗口组合到其他应用窗口中。
<br/>
-
print:打印框架的ExtensionAbility。
<br/>
**说明:**
<br/>
-
其中service和dataShare类型,仅支持系统应用配置,三方应用配置不生效。 | 字符串 | 该标签不可缺省。 |
| label | 标识当前ExtensionAbility组件对用户显示的名称,标签值配置为该名称的资源索引以支持多语言。
<br/>
>
**说明:**
<br/>
>
如果ExtensionAbility被配置当前Module的mainElement时,该标签必须配置,且应用内唯一。 | 字符串 | 该标签不可缺省。 |
| type | 标识当前ExtensionAbility组件的类型,取值为:
<br/>
-
form:卡片的ExtensionAbility。
<br/>
-
workScheduler:延时任务的ExtensionAbility。
<br/>
-
inputMethod:输入法的ExtensionAbility。
<br/>
-
service:后台运行的service组件。
<br/>
-
accessibility:辅助能力的ExtensionAbility。
<br/>
-
dataShare:数据共享的ExtensionAbility。
<br/>
-
fileShare:文件共享的ExtensionAbility。
<br/>
-
staticSubscriber:静态广播的ExtensionAbility。
<br/>
-
wallpaper:壁纸的ExtensionAbility。
<br/>
-
backup:数据备份的ExtensionAbility。
<br/>
-
window:该ExtensionAbility会在启动过程中创建一个window,为开发者提供界面开发。开发者开发出来的界面将通过abilityComponent控件组合到其他应用的窗口中。
<br/>
-
thumbnail:获取文件缩略图的ExtensionAbility,开发者可以对自定义文件类型的文件提供缩略。
<br/>
-
preview:该ExtensionAbility会将文件解析后在一个窗口中显示,开发者可以通过将此窗口组合到其他应用窗口中。
<br/>
-
print:打印框架的ExtensionAbility。
<br/>
>
**说明:**
<br/>
>
其中service和dataShare类型,仅支持系统应用配置,三方应用配置不生效。 | 字符串 | 该标签不可缺省。 |
| permissions | 标识当前ExtensionAbility组件自定义的权限信息。当其他应用访问该ExtensionAbility时,需要申请相应的权限信息。
<br/>
一个数组元素为一个权限名称。通常采用反向域名格式(最大255字节),可以是系统预定义的权限,也可以是该应用自定义的权限。如果是后者,需与defPermissions标签中定义的某个权限的name标签值一致。 | 字符串数组 | 该标签可缺省,缺省值为空。 |
| uri | 标识当前ExtensionAbility组件提供的数据URI,为字符数组类型(最大长度255),用反向域名的格式表示。
<br/>
**说明:**
<br/>
-
该标签在type为dataShare类型的ExtensionAbility时,不可缺省。 | 字符串 | 该标签可缺省,缺省值为空。 |
|skills | 标识当前ExtensionAbility组件能够接收的
[
Want
](
../application-models/want-overview.md
)
的特征集,为数组格式。
<br/>
配置规则:entry包可以配置多个具有入口能力的skills标签(配置了ohos.want.action.home和entity.system.home)的ExtensionAbility,其中第一个配置了skills标签的ExtensionAbility中的label和icon作为OpenHarmony服务或应用的label和icon。
<br/>
**说明:**
<br/>
- OpenHarmony服务的Feature包不能配置具有入口能力的skills标签。
<br/>
-
OpenHarmony应用的Feature包可以配置具有入口能力的skills标签。 | 数组 | 该标签可缺省,缺省值为空。 |
| uri | 标识当前ExtensionAbility组件提供的数据URI,为字符数组类型(最大长度255),用反向域名的格式表示。
<br/>
>
**说明:**
<br/>
>
该标签在type为dataShare类型的ExtensionAbility时,不可缺省。 | 字符串 | 该标签可缺省,缺省值为空。 |
|skills | 标识当前ExtensionAbility组件能够接收的
[
Want
](
../application-models/want-overview.md
)
的特征集,为数组格式。
<br/>
配置规则:entry包可以配置多个具有入口能力的skills标签(配置了ohos.want.action.home和entity.system.home)的ExtensionAbility,其中第一个配置了skills标签的ExtensionAbility中的label和icon作为OpenHarmony服务或应用的label和icon。
<br/>
>
**说明:**
<br/>
> OpenHarmony服务的Feature包不能配置具有入口能力的skills标签。
<br/>
>
OpenHarmony应用的Feature包可以配置具有入口能力的skills标签。 | 数组 | 该标签可缺省,缺省值为空。 |
|
[
metadata
](
#metadata标签
)
| 标识当前ExtensionAbility组件的元信息。 | 对象 | 该标签可缺省,缺省值为空。 |
| exported | 标识当前ExtensionAbility组件是否可以被其他应用调用,为布尔类型。
<br/>
-
true:表示可以被其他应用调用。
<br/>
-
false:表示不可以被其他应用调用。 | 布尔值 | 该标签可缺省,缺省值为false。 |
...
...
@@ -495,8 +493,8 @@ extensionAbilities示例:
| 属性 | 含义 | 类型 | 取值范围 | 默认值 |
| -------- | -------- | -------- | -------- | -------- |
| name | 必须,填写需要使用的权限名称。 | 字符串 | 自定义。 | 无。 |
| reason | 可选,当申请的权限为user_grant权限时此字段必填,用于描述申请权限的原因。
<br/>
**说明:**
<br/>
-
当申请的权限为user_grant权限时,如果未填写该字段则不允许在应用市场上架,并且需要进行多语种适配。 | 字符串 | 使用string类资源引用。格式为$string:
\*\*\*
。 | 空。 |
| usedScene | 可选,当申请的权限为user_grant权限时此字段必填。描述权限使用的场景由abilities和when组成。其中abilities可以配置为多个UIAbility组件,when表示调用时机。
<br/>
**说明:**
<br/>
-
默认为可选,当申请的权限为user_grant权限时,abilities标签必填,when标签可选。 | abilities:UIAbility或者ExtensionAbility名称的字符串数组
<br/>
when:字符串 | abilities:UIAbility或者ExtensionAbility组件的名称。
<br/>
when:inuse(使用时)、always(始终)。 | abilities:空。
<br/>
when:空。 |
| reason | 可选,当申请的权限为user_grant权限时此字段必填,用于描述申请权限的原因。
<br/>
>
**说明:**
<br/>
>
当申请的权限为user_grant权限时,如果未填写该字段则不允许在应用市场上架,并且需要进行多语种适配。 | 字符串 | 使用string类资源引用。格式为$string:
\*\*\*
。 | 空。 |
| usedScene | 可选,当申请的权限为user_grant权限时此字段必填。描述权限使用的场景由abilities和when组成。其中abilities可以配置为多个UIAbility组件,when表示调用时机。
<br/>
>
**说明:**
<br/>
>
默认为可选,当申请的权限为user_grant权限时,abilities标签必填,when标签可选。 | abilities:UIAbility或者ExtensionAbility名称的字符串数组
<br/>
when:字符串 | abilities:UIAbility或者ExtensionAbility组件的名称。
<br/>
when:inuse(使用时)、always(始终)。 | abilities:空。
<br/>
when:空。 |
requestPermissions示例:
...
...
@@ -536,7 +534,7 @@ metadata中指定shortcut信息,其中:
| shortcutId | 标识快捷方式的ID。字符串的最大长度为63字节。 | 字符串 | 该标签不可缺省。 |
| label | 标识快捷方式的标签信息,即快捷方式对外显示的文字描述信息。取值可以是描述性内容,也可以是标识label的资源索引。字符串最大长度为255字节。 | 字符串 | 该标签可缺省,缺省值为空。 |
| icon | 标识快捷方式的图标,标签值为资源文件的索引。 | 字符串 | 该标签可缺省,缺省值为空。 |
|
[
wants
](
../application-models/want-overview.md
)
| 标识快捷方式内定义的目标wants信息集合,每个wants可配置bundleName和abilityName两个子标签。
<br/>
bundleName:表示快捷方式的目标Bundle名称,字符串类型。
<br/>
abilityName:表示快捷方式的目标组件名,字符串类型。 | 对象 | 该标签可缺省,缺省为空。 |
|
[
wants
](
../application-models/want-overview.md
)
| 标识快捷方式内定义的目标wants信息集合,每个wants可配置bundleName和abilityName两个子标签。
<br/>
- bundleName:表示快捷方式的目标Bundle名称,字符串类型。
<br/>
-
abilityName:表示快捷方式的目标组件名,字符串类型。 | 对象 | 该标签可缺省,缺省为空。 |
1.
在/resource/base/profile/目录下配置shortcuts_config.json配置文件。
...
...
@@ -695,7 +693,7 @@ metadata中指定shortcut信息,其中:
此标签用于支持对测试框架的配置。
**表14**
**testRunner标签说明**
**表14**
**testRunner标签说明**
| 属性名称 | 含义 | 数据类型 | 是否可缺省 |
| -------- | -------- | -------- | -------- |
...
...
zh-cn/application-dev/security/accesstoken-guidelines.md
浏览文件 @
16bea3fa
...
...
@@ -13,9 +13,11 @@
## 配置文件权限声明
应用需要在
工程配置文件中,对需要的权限逐个声明,未在配置文件中声明的权限,应用将无法获得授权。OpenHarmony提供了两种应用模型,分别为FA模型和Stage模型,更多信息可以参考
[
应用模型解读
](
../application-models/application-model-description.md
)
。不同的应用模型的应用包结构不同,所使用的配置文件不同
。
应用需要在
项目的配置文件中逐个声明所需的权限,否则应用将无法获取授权
。
> **说明**:应用默认的APL等级为`normal`,当应用需要申请`system_basic`和`system_core`等级时,除了在配置文件中进行权限声明之外,还需要通过[ACL方式](#acl方式声明)进行声明使用。
> **说明**:
>
> 应用在申请`system_basic`和`system_core`等级权限时,需要提升权限等级,因为应用默认的权限等级为`normal`。如果应用需要申请高于默认等级的权限,除了在配置文件中进行声明之外,还需要通过[ACL方式](#acl方式声明)进行声明使用。
配置文件标签说明如下表所示。
...
...
@@ -98,9 +100,9 @@
## ACL方式声明
应用在申请
`system_basic`
和
`system_core`
等级权限时,高于应用默认的
`normal`
等级。当应用需要申请权限项的等级高于应用默认的等级时,需要通过ACL方式进行
声明使用。
当应用需要申请
`system_basic`
和
`system_core`
等级的权限时,比应用默认权限等级
`normal`
更高。如果需要申请的权限等级高于应用默认的等级,需要使用ACL方式
声明使用。
例如
应用在申请访问用户公共目录下音乐类型的文件,需要申请
` ohos.permission.WRITE_AUDIO`
权限,该权限为
`system_basic`
等级;以及应用在申请截取屏幕图像功能,该权限为
`system_core`
等级,需要申请
` ohos.permission.CAPTURE_SCREEN`
权限。此时
需要将相关权限项配置到
[
HarmonyAppProvision配置文件
](
app-provision-structure.md
)
的
`acl`
字段中。
例如
,如果应用需要访问用户公共目录中的音乐文件,需要申请
`ohos.permission.WRITE_AUDIO`
权限,该权限属于
`system_basic`
等级。如果应用需要截取屏幕图像,则需要申请
`ohos.permission.CAPTURE_SCREEN`
权限,该权限属于
`system_core`
等级。此时,
需要将相关权限项配置到
[
HarmonyAppProvision配置文件
](
app-provision-structure.md
)
的
`acl`
字段中。
```
json
{
...
...
@@ -116,12 +118,14 @@
## 向用户申请授权
应用需要获取用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或者录制视频等,需要向用户申请授权。此时应用申请的权限包括了
`user_grant`
类型权限,需要先通过权限校验,判断当前调用者是否具备相应权限。当权限校验结果显示当前应用尚未被授权该权限时,再通过动态弹框授权方式给用户提供手动授权
入口。示意效果如下图所示。
当应用需要访问用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,应该向用户请求授权。这需要使用
`user_grant`
类型权限。在此之前,应用需要进行权限校验,以判断当前调用者是否具备所需的权限。如果权限校验结果表明当前应用尚未被授权该权限,则应使用动态弹框授权方式,为用户提供手动授权的
入口。示意效果如下图所示。
图1 向用户申请授权

> **说明**:每次访问受目标权限保护的接口前,都需要调用[requestPermissionsFromUser()](../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)接口请求权限,用户在动态授予后可能通过设置取消应用的权限,因此不能把之前授予的授权状态持久化。
> **说明**:
>
> 每次访问受目标权限保护的接口之前,都需要使用 [requestPermissionsFromUser()](../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9) 接口请求相应的权限。用户可能在动态授予权限后通过系统设置来取消应用的权限,因此不能将之前授予的授权状态持久化。
### Stage模型
...
...
@@ -129,70 +133,123 @@
1.
申请
`ohos.permission.READ_CALENDAR`
权限,配置方式请参见
[
访问控制授权申请
](
#配置文件权限声明
)
。
2.
可以在UIAbility的onWindowStageCreate()回调中调用
[
requestPermissionsFromUser()
](
../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9
)
接口动态申请权限,也可以根据业务需要在UI界面中向用户申请授权。根据
[
requestPermissionsFromUser()
](
../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9
)
接口返回值判断是否已获取目标权限,如果当前已经获取权限,则可以继续正常访问目标接口。
2.
校验当前是否已经授权。
在进行权限申请之前,需要先检查当前应用程序是否已经被授予了权限。可以通过调用
[
checkAccessToken()
](
../reference/apis/js-apis-abilityAccessCtrl.md#checkaccesstoken9
)
方法来校验当前是否已经授权。如果已经授权,则可以直接访问目标操作,否则需要进行下一步操作,即向用户申请授权。
```
ts
import
bundleManager
from
'
@ohos.bundle.bundleManager
'
;
import
abilityAccessCtrl
,
{
Permissions
}
from
'
@ohos.abilityAccessCtrl
'
;
async
function
checkAccessToken
(
permission
:
Permissions
):
Promise
<
abilityAccessCtrl
.
GrantStatus
>
{
let
atManager
=
abilityAccessCtrl
.
createAtManager
();
let
grantStatus
:
abilityAccessCtrl
.
GrantStatus
;
在UIAbility中动态申请授权。
// 获取应用程序的accessTokenID
let
tokenId
:
number
;
try
{
let
bundleInfo
:
bundleManager
.
BundleInfo
=
await
bundleManager
.
getBundleInfoForSelf
(
bundleManager
.
BundleFlag
.
GET_BUNDLE_INFO_WITH_APPLICATION
);
let
appInfo
:
bundleManager
.
ApplicationInfo
=
bundleInfo
.
appInfo
;
tokenId
=
appInfo
.
accessTokenId
;
}
catch
(
err
)
{
console
.
error
(
`getBundleInfoForSelf failed, code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
}
// 校验应用是否被授予权限
try
{
grantStatus
=
await
atManager
.
checkAccessToken
(
tokenId
,
permission
);
}
catch
(
err
)
{
console
.
error
(
`checkAccessToken failed, code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
}
return
grantStatus
;
}
async
function
checkPermissions
():
Promise
<
void
>
{
const
permissions
:
Array
<
Permissions
>
=
[
'
ohos.permission.READ_CALENDAR
'
];
let
grantStatus
:
abilityAccessCtrl
.
GrantStatus
=
await
checkAccessToken
(
permissions
[
0
]);
if
(
grantStatus
===
abilityAccessCtrl
.
GrantStatus
.
PERMISSION_GRANTED
)
{
// 已经授权,可以继续访问目标操作
}
else
{
// 申请日历权限
}
}
```
3.
动态向用户申请授权。
动态向用户申请权限是指在应用程序运行时向用户请求授权的过程。可以通过调用
[
requestPermissionsFromUser()
](
../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9
)
方法来实现。该方法接收一个权限列表参数,例如位置、日历、相机、麦克风等。用户可以选择授予权限或者拒绝授权。
可以在UIAbility的
`onWindowStageCreate()`
回调中调用
[
requestPermissionsFromUser()
](
../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9
)
方法来动态申请权限,也可以根据业务需要在UI中向用户申请授权。
在UIAbility中向用户申请授权。
```
typescript
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
import
window
from
'
@ohos.window
'
;
import
abilityAccessCtrl
,
{
Permissions
}
from
'
@ohos.abilityAccessCtrl
'
;
const
permissions
:
Array
<
Permissions
>
=
[
'
ohos.permission.READ_CALENDAR
'
];
export
default
class
EntryAbility
extends
UIAbility
{
// ...
// ...
onWindowStageCreate
(
windowStage
:
window
.
WindowStage
)
{
// Main window is created, set main page for this ability
let
context
=
this
.
context
;
let
atManager
=
abilityAccessCtrl
.
createAtManager
();
// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
const
permissions
:
Array
<
Permissions
>
=
[
'
ohos.permission.READ_CALENDAR
'
];
atManager
.
requestPermissionsFromUser
(
context
,
permissions
).
then
((
data
)
=>
{
console
.
info
(
`[requestPermissions] data:
${
JSON
.
stringify
(
data
)}
`
);
let
grantStatus
:
Array
<
number
>
=
data
.
authResults
;
let
length
:
number
=
grantStatus
.
length
;
for
(
let
i
=
0
;
i
<
length
;
i
++
)
{
if
(
grantStatus
[
i
]
!==
0
)
{
// 授权失败
return
;
}
}
// 授权成功
}).
catch
((
err
)
=>
{
console
.
error
(
`[requestPermissions] Failed to start request permissions. Error:
${
JSON
.
stringify
(
err
)}
`
);
})
// ...
}
onWindowStageCreate
(
windowStage
:
window
.
WindowStage
)
{
// Main window is created, set main page for this ability
let
context
=
this
.
context
;
let
atManager
=
abilityAccessCtrl
.
createAtManager
();
// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
atManager
.
requestPermissionsFromUser
(
context
,
permissions
).
then
((
data
)
=>
{
let
grantStatus
:
Array
<
number
>
=
data
.
authResults
;
let
length
:
number
=
grantStatus
.
length
;
for
(
let
i
=
0
;
i
<
length
;
i
++
)
{
if
(
grantStatus
[
i
]
===
0
)
{
// 用户授权,可以继续访问目标操作
}
else
{
// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
return
;
}
}
// 授权成功
}).
catch
((
err
)
=>
{
console
.
error
(
`requestPermissionsFromUser failed, code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
})
// ...
}
}
```
在UI
界面
中向用户申请授权。
在UI中向用户申请授权。
```
typescript
import
abilityAccessCtrl
,
{
Permissions
}
from
'
@ohos.abilityAccessCtrl
'
;
import
common
from
'
@ohos.app.ability.common
'
;
const
permissions
:
Array
<
Permissions
>
=
[
'
ohos.permission.READ_CALENDAR
'
];
@
Entry
@
Component
struct
Index
{
reqPermissions
()
{
reqPermissions
FromUser
(
permissions
:
Array
<
Permissions
>
):
void
{
let
context
=
getContext
(
this
)
as
common
.
UIAbilityContext
;
let
atManager
=
abilityAccessCtrl
.
createAtManager
();
// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
const
permissions
:
Array
<
Permissions
>
=
[
'
ohos.permission.READ_CALENDAR
'
];
atManager
.
requestPermissionsFromUser
(
context
,
permissions
).
then
((
data
)
=>
{
console
.
info
(
`[requestPermissions] data:
${
JSON
.
stringify
(
data
)}
`
);
let
grantStatus
:
Array
<
number
>
=
data
.
authResults
;
let
length
:
number
=
grantStatus
.
length
;
for
(
let
i
=
0
;
i
<
length
;
i
++
)
{
if
(
grantStatus
[
i
]
!==
0
)
{
// 授权失败
if
(
grantStatus
[
i
]
===
0
)
{
// 用户授权,可以继续访问目标操作
}
else
{
// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
return
;
}
}
// 授权成功
}).
catch
((
err
)
=>
{
console
.
error
(
`
[requestPermissions] Failed to start request permissions. Error:
${
JSON
.
stringify
(
err
)
}
`
);
console
.
error
(
`
requestPermissionsFromUser failed, code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
})
}
...
...
@@ -203,6 +260,27 @@
}
```
4.
处理授权结果。
调用
[
requestPermissionsFromUser()
](
../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9
)
方法后,应用程序将等待用户授权的结果。如果用户授权,则可以继续访问目标操作。如果用户拒绝授权,则需要提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限。
```
ts
function
openPermissionsInSystemSettings
():
void
{
let
context
=
getContext
(
this
)
as
common
.
UIAbilityContext
;
let
wantInfo
=
{
action
:
'
action.settings.app.info
'
,
parameters
:
{
settingsParamBundleName
:
'
com.example.myapplication
'
// 打开指定应用的详情页面
}
}
context
.
startAbility
(
wantInfo
).
then
(()
=>
{
// ...
}).
catch
((
err
)
=>
{
// ...
})
}
```
### FA模型
通过调用
[
requestPermissionsFromUser()
](
../reference/apis/js-apis-inner-app-context.md#contextrequestpermissionsfromuser7
)
接口向用户动态申请授权。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录