未验证 提交 f8e4a831 编写于 作者: O openharmony_ci 提交者: Gitee

!14515...

!14515 1)发送通知的notificationRequest参数增加notificationManager.NotificationRequest类型;2)新增一个关闭应用中所有实例的方法;3)应用上下文的UIAbilityContext中增加一个“页面中如何获取到UIAbilityContext”的说明
Merge pull request !14515 from zyjhandsome/master
# 常见action与entities # 常见action与entities
**[action](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantaction)**:表示调用方要执行的通用操作(如查看、分享、应用详情)。在隐式Want中,您可定义该字段,配合uri或parameters来表示对数据要执行的操作。如打开,查看该uri数据。例如,当uri为一段网址,action为ohos.want.action.viewData则表示匹配可查看该网址的Ability。在Want内声明action字段表示希望被调用方应用支持声明的操作。在被调用方应用配置文件skills字段内声明actions表示该应用支持声明操作。 **action**:表示调用方要执行的通用操作(如查看、分享、应用详情)。在隐式Want中,您可定义该字段,配合uri或parameters来表示对数据要执行的操作。如打开,查看该uri数据。例如,当uri为一段网址,action为ohos.want.action.viewData则表示匹配可查看该网址的Ability。在Want内声明action字段表示希望被调用方应用支持声明的操作。在被调用方应用配置文件skills字段内声明actions表示该应用支持声明操作。
**常见action** **常见action**
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
- ACTION_VIEW_MULTIPLE_DATA:发送多个数据记录的操作。 - ACTION_VIEW_MULTIPLE_DATA:发送多个数据记录的操作。
**[entities](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantentity)**:表示目标Ability的类别信息(如浏览器、视频播放器),在隐式Want中是对action的补充。在隐式Want中,开发者可定义该字段,来过滤匹配应用的类别,例如必须是浏览器。在Want内声明entities字段表示希望被调用方应用属于声明的类别。在被调用方应用配置文件skills字段内声明entites表示该应用支持的类别。 **entities**:表示目标Ability的类别信息(如浏览器、视频播放器),在隐式Want中是对action的补充。在隐式Want中,开发者可定义该字段,来过滤匹配应用的类别,例如必须是浏览器。在Want内声明entities字段表示希望被调用方应用属于声明的类别。在被调用方应用配置文件skills字段内声明entites表示该应用支持的类别。
**常用entities** **常用entities**
......
...@@ -23,6 +23,10 @@ ...@@ -23,6 +23,10 @@
} }
} }
``` ```
> **说明:**
>
> 页面中获取UIAbility实例的上下文信息请参见[获取UIAbility的上下文信息](uiability-usage.md#获取uiability的上下文信息)。
- 获取特定场景[ExtensionContext](../reference/apis/js-apis-inner-application-extensionContext.md)。以ServiceExtensionContext为例,表示后台服务的上下文环境,继承自ExtensionContext,提供后台服务相关的接口能力。 - 获取特定场景[ExtensionContext](../reference/apis/js-apis-inner-application-extensionContext.md)。以ServiceExtensionContext为例,表示后台服务的上下文环境,继承自ExtensionContext,提供后台服务相关的接口能力。
```ts ```ts
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
### want参数的action匹配规则 ### want参数的action匹配规则
将调用方传入的want参数的[action](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantaction)与待匹配Ability的skills配置中的actions进行匹配。 将调用方传入的want参数的action与待匹配Ability的skills配置中的actions进行匹配。
- 调用方传入的want参数的action不为空,待匹配Ability的skills配置中的actions为空,则action匹配失败。 - 调用方传入的want参数的action不为空,待匹配Ability的skills配置中的actions为空,则action匹配失败。
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
### want参数的entities匹配规则 ### want参数的entities匹配规则
将调用方传入的want参数的[entities](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantentity)与待匹配Ability的skills配置中的entities进行匹配。 将调用方传入的want参数的entities与待匹配Ability的skills配置中的entities进行匹配。
- 调用方传入的want参数的entities为空,待匹配Ability的skills配置中的entities不为空,则entities匹配成功。 - 调用方传入的want参数的entities为空,待匹配Ability的skills配置中的entities不为空,则entities匹配成功。
......
...@@ -75,6 +75,8 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳 ...@@ -75,6 +75,8 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
> >
> 调用[terminateSelf()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateself)方法停止当前UIAbility实例时,默认会保留该实例的快照(Snapshot),即在最近任务列表中仍然能查看到该实例对应的任务。如不需要保留该实例的快照,可以在其对应UIAbility的[module.json5配置文件](../quick-start/module-configuration-file.md)中,将[abilities标签](../quick-start/module-configuration-file.md#abilities标签)的removeMissionAfterTerminate字段配置为true。 > 调用[terminateSelf()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateself)方法停止当前UIAbility实例时,默认会保留该实例的快照(Snapshot),即在最近任务列表中仍然能查看到该实例对应的任务。如不需要保留该实例的快照,可以在其对应UIAbility的[module.json5配置文件](../quick-start/module-configuration-file.md)中,将[abilities标签](../quick-start/module-configuration-file.md#abilities标签)的removeMissionAfterTerminate字段配置为true。
4. 如需要关闭应用所有的UIAbility实例,可以调用[ApplicationContext](../reference/apis/js-apis-inner-application-applicationContext.md)的killProcessBySelf()方法实现关闭应用所有的进程。
## 启动应用内的UIAbility并获取返回结果 ## 启动应用内的UIAbility并获取返回结果
...@@ -149,11 +151,11 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳 ...@@ -149,11 +151,11 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
- 显式Want启动:启动一个确定应用的UIAbility,在want参数中需要设置该应用bundleName和abilityName,当需要拉起某个明确的UIAbility时,通常使用显式Want启动方式。 - 显式Want启动:启动一个确定应用的UIAbility,在want参数中需要设置该应用bundleName和abilityName,当需要拉起某个明确的UIAbility时,通常使用显式Want启动方式。
- 隐式Want启动:根据匹配条件由用户选择启动哪一个UIAbility,即不明确指出要启动哪一个UIAbility(abilityName参数未设置),在调用[startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability)方法时,其入参want中指定了一系列的[entities](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantentity)字段(表示目标UIAbility额外的类别信息,如浏览器、视频播放器)和[actions](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantaction)字段(表示要执行的通用操作,如查看、分享、应用详情等)等参数信息,然后由系统去分析want,并帮助找到合适的UIAbility来启动。当需要拉起其他应用的UIAbility时,开发者通常不知道用户设备中应用的安装情况,也无法确定目标应用的bundleName和abilityName,通常使用隐式Want启动方式。 - 隐式Want启动:根据匹配条件由用户选择启动哪一个UIAbility,即不明确指出要启动哪一个UIAbility(abilityName参数未设置),在调用[startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability)方法时,其入参want中指定了一系列的entities字段(表示目标UIAbility额外的类别信息,如浏览器、视频播放器)和actions字段(表示要执行的通用操作,如查看、分享、应用详情等)等参数信息,然后由系统去分析want,并帮助找到合适的UIAbility来启动。当需要拉起其他应用的UIAbility时,开发者通常不知道用户设备中应用的安装情况,也无法确定目标应用的bundleName和abilityName,通常使用隐式Want启动方式。
本章节主要讲解如何通过隐式Want启动其他应用的UIAbility。 本章节主要讲解如何通过隐式Want启动其他应用的UIAbility。
1. 将多个待匹配的文档应用安装到设备,在其对应UIAbility的[module.json5配置文件](../quick-start/module-configuration-file.md)中,配置skills的[entities](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantentity)字段和[actions](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantaction)字段。 1. 将多个待匹配的文档应用安装到设备,在其对应UIAbility的[module.json5配置文件](../quick-start/module-configuration-file.md)中,配置skills的entities字段和actions字段。
```json ```json
{ {
...@@ -216,7 +218,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳 ...@@ -216,7 +218,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
当使用隐式Want启动其他应用的UIAbility并希望获取返回结果时,调用方需要使用[startAbilityForResult()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateselfwithresult)方法启动目标UIAbility。例如主应用中需要启动三方支付并获取支付结果。 当使用隐式Want启动其他应用的UIAbility并希望获取返回结果时,调用方需要使用[startAbilityForResult()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateselfwithresult)方法启动目标UIAbility。例如主应用中需要启动三方支付并获取支付结果。
1. 在支付应用对应UIAbility的module.json5配置文件中,配置skills的[entities](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantentity)字段和[actions](../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantaction)字段。 1. 在支付应用对应UIAbility的module.json5配置文件中,配置skills的entities字段和actions字段。
```json ```json
{ {
......
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
```typescript ```typescript
// 构造NotificationRequest对象 // 构造NotificationRequest对象
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
normal: { normal: {
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
4. 构造进度条模板对象,并发布通知。 4. 构造进度条模板对象,并发布通知。
```ts ```ts
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
id: 1, id: 1,
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
- 普通文本类型通知由标题、文本内容和附加信息三个字段组成,其中标题和文本内容是必填字段,大小均需要小于200字节。 - 普通文本类型通知由标题、文本内容和附加信息三个字段组成,其中标题和文本内容是必填字段,大小均需要小于200字节。
```ts ```ts
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
id: 1, id: 1,
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知 contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
- 长文本类型通知继承了普通文本类型的字段,同时新增了长文本内容、内容概要和通知展开时的标题,其中长文本内容不超过1024字节,其他字段小于200字节。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,内容为长文本内容。 - 长文本类型通知继承了普通文本类型的字段,同时新增了长文本内容、内容概要和通知展开时的标题,其中长文本内容不超过1024字节,其他字段小于200字节。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,内容为长文本内容。
```ts ```ts
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
id: 1, id: 1,
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, // 长文本类型通知 contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, // 长文本类型通知
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
- 多行文本类型通知继承了普通文本类型的字段,同时新增了多行文本内容、内容概要和通知展开时的标题,其字段均小于200字节。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,多行文本内容多行显示。 - 多行文本类型通知继承了普通文本类型的字段,同时新增了多行文本内容、内容概要和通知展开时的标题,其字段均小于200字节。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,多行文本内容多行显示。
```ts ```ts
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
id: 1, id: 1,
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_MULTILINE, // 多行文本类型通知 contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_MULTILINE, // 多行文本类型通知
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
```ts ```ts
let notificationPicture: PixelMap = undefined; // 需要获取图片PixelMap信息 let notificationPicture: PixelMap = undefined; // 需要获取图片PixelMap信息
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
id: 1, id: 1,
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_PICTURE, contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_PICTURE,
......
...@@ -46,7 +46,7 @@ app.json5配置文件包含以下标签。 ...@@ -46,7 +46,7 @@ app.json5配置文件包含以下标签。
| minAPIVersion | 标识应用运行需要的SDK的API最小版本。 | 数值 | 由build-profile.json5中的compatibleSdkVersion生成。 | | minAPIVersion | 标识应用运行需要的SDK的API最小版本。 | 数值 | 由build-profile.json5中的compatibleSdkVersion生成。 |
| targetAPIVersion | 标识应用运行需要的API目标版本。 | 数值 | 由build-profile.json5中的compileSdkVersion生成。 | | targetAPIVersion | 标识应用运行需要的API目标版本。 | 数值 | 由build-profile.json5中的compileSdkVersion生成。 |
| apiReleaseType | 标识应用运行需要的API目标版本的类型,采用字符串类型表示。取值为“CanaryN”、“BetaN”或者“Release”,其中,N代表大于零的整数。<br/>-&nbsp;Canary:受限发布的版本。<br/>-&nbsp;Beta:公开发布的Beta版本。<br/>-&nbsp;Release:公开发布的正式版本。<br/>该字段由DevEco&nbsp;Studio读取当前使用的SDK的Stage来生成。 | 字符串 | 该标签可缺省,由IDE生成并覆盖。 | | apiReleaseType | 标识应用运行需要的API目标版本的类型,采用字符串类型表示。取值为“CanaryN”、“BetaN”或者“Release”,其中,N代表大于零的整数。<br/>-&nbsp;Canary:受限发布的版本。<br/>-&nbsp;Beta:公开发布的Beta版本。<br/>-&nbsp;Release:公开发布的正式版本。<br/>该字段由DevEco&nbsp;Studio读取当前使用的SDK的Stage来生成。 | 字符串 | 该标签可缺省,由IDE生成并覆盖。 |
| distributedNotificationEnabled | 标识应用是否开启分布式通知,当开启分布式通知时,同一分布式组网下的两个设备(A和B),当设备A收到一条消息时,设备B会收到一分布式消息用于设备B的使用者去查看设备A的消息。<br/>-&nbsp;true:开启。<br/>-&nbsp;false:不开启。 | 布尔值 | 该标签可缺省,缺省值为false。 | | distributedNotificationEnabled | 标识应用是否开启分布式通知,当开启分布式通知时,同一分布式组网下的两个设备(A和B),当设备A收到一条消息时,设备B会收到一分布式消息用于设备B的使用者去查看设备A的消息。<br/>-&nbsp;true:开启。<br/>-&nbsp;false:不开启。 | 布尔值 | 该标签可缺省,缺省值为false。 |
| entityType | 标识应用的类别,分别有:<br/>-&nbsp;game:游戏类。<br/>-&nbsp;media:影音类。<br/>-&nbsp;communication:社交通信类。<br/>-&nbsp;news:新闻类。<br/>-&nbsp;travel:出行类。<br/>-&nbsp;utility:工具类。<br/>-&nbsp;shopping:购物类。<br/>-&nbsp;education:教育类。<br/>-&nbsp;kids:少儿类。<br/>-&nbsp;business:商务类。<br/>-&nbsp;photography:拍摄类。<br/>-&nbsp;unspecified:不属于上述的任何一类。 | 字符串 | 该标签可以缺省,缺省为unspecified。 | | entityType | 标识应用的类别,分别有:<br/>-&nbsp;game:游戏类。<br/>-&nbsp;media:影音类。<br/>-&nbsp;communication:社交通信类。<br/>-&nbsp;news:新闻类。<br/>-&nbsp;travel:出行类。<br/>-&nbsp;utility:工具类。<br/>-&nbsp;shopping:购物类。<br/>-&nbsp;education:教育类。<br/>-&nbsp;kids:少儿类。<br/>-&nbsp;business:商务类。<br/>-&nbsp;photography:拍摄类。<br/>-&nbsp;unspecified:不属于上述的任何一类。 | 字符串 | 该标签可以缺省,缺省为unspecified。 |
| multiProjects | 标识当前工程是否支持多个工程的联合开发。<br/>-&nbsp;true:当前工程支持多个工程的联合开发。<br/>-&nbsp;false:当前工程不支持多个工程的联合开发。 | 布尔值 | 可缺省,缺省值为false。 | | multiProjects | 标识当前工程是否支持多个工程的联合开发。<br/>-&nbsp;true:当前工程支持多个工程的联合开发。<br/>-&nbsp;false:当前工程不支持多个工程的联合开发。 | 布尔值 | 可缺省,缺省值为false。 |
| tablet | 标识对tablet设备做的特殊配置,可以配置的属性字段有上文提到的:minAPIVersion、distributedNotificationEnabled。<br/>如果使用该属性对tablet设备做了特殊配置,则应用在tablet设备中会采用此处配置的属性值,并忽略在app.json5公共区域配置的属性值。 | 对象 | 该标签可缺省,缺省时tablet设备使用app.json5公共区域配置的属性值。 | | tablet | 标识对tablet设备做的特殊配置,可以配置的属性字段有上文提到的:minAPIVersion、distributedNotificationEnabled。<br/>如果使用该属性对tablet设备做了特殊配置,则应用在tablet设备中会采用此处配置的属性值,并忽略在app.json5公共区域配置的属性值。 | 对象 | 该标签可缺省,缺省时tablet设备使用app.json5公共区域配置的属性值。 |
......
...@@ -12,8 +12,6 @@ wantConstant模块提供want中操作want常数和解释Flags说明的能力。 ...@@ -12,8 +12,6 @@ wantConstant模块提供want中操作want常数和解释Flags说明的能力。
import wantConstant from '@ohos.app.ability.wantConstant'; import wantConstant from '@ohos.app.ability.wantConstant';
``` ```
## wantConstant.Params ## wantConstant.Params
want的Params操作的常量。 want的Params操作的常量。
...@@ -27,8 +25,6 @@ want的Params操作的常量。 ...@@ -27,8 +25,6 @@ want的Params操作的常量。
| DLP_PARAMS_INDEX | ohos.dlp.params.index | 指示DLP索引参数的操作。 <br>**系统API**:该接口为系统接口,三方应用不支持调用。 | | DLP_PARAMS_INDEX | ohos.dlp.params.index | 指示DLP索引参数的操作。 <br>**系统API**:该接口为系统接口,三方应用不支持调用。 |
## wantConstant.Flags ## wantConstant.Flags
Flags说明。用于表示处理Want的方式。 Flags说明。用于表示处理Want的方式。
......
...@@ -50,7 +50,7 @@ function publishCallback(err) { ...@@ -50,7 +50,7 @@ function publishCallback(err) {
} }
} }
//通知Request对象 //通知Request对象
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
id: 1, id: 1,
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
...@@ -93,7 +93,7 @@ publish(request: NotificationRequest): Promise\<void\> ...@@ -93,7 +93,7 @@ publish(request: NotificationRequest): Promise\<void\>
```ts ```ts
// 通知Request对象 // 通知Request对象
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
notificationId: 1, notificationId: 1,
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
...@@ -156,7 +156,7 @@ function publishCallback(err) { ...@@ -156,7 +156,7 @@ function publishCallback(err) {
// 用户ID // 用户ID
let userId = 1; let userId = 1;
// 通知Request对象 // 通知Request对象
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
id: 1, id: 1,
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
...@@ -204,7 +204,7 @@ publish(request: NotificationRequest, userId: number): Promise\<void\> ...@@ -204,7 +204,7 @@ publish(request: NotificationRequest, userId: number): Promise\<void\>
**示例:** **示例:**
```ts ```ts
let notificationRequest = { let notificationRequest: notificationManager.NotificationRequest = {
notificationId: 1, notificationId: 1,
content: { content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
......
...@@ -148,11 +148,14 @@ ...@@ -148,11 +148,14 @@
atManager.requestPermissionsFromUser(context, permissions).then((data) => { atManager.requestPermissionsFromUser(context, permissions).then((data) => {
console.info(`[requestPermissions] data: ${JSON.stringify(data)}`); console.info(`[requestPermissions] data: ${JSON.stringify(data)}`);
let grantStatus: Array<number> = data.authResults; let grantStatus: Array<number> = data.authResults;
if (grantStatus[0] === -1) { let length: number = grantStatus.length;
for (let i = 0; i < length; i++) {
if (grantStatus[i] !== 0) {
// 授权失败 // 授权失败
} else { return;
// 授权成功 }
} }
// 授权成功
}).catch((err) => { }).catch((err) => {
console.error(`[requestPermissions] Failed to start request permissions. Error: ${JSON.stringify(err)}`); console.error(`[requestPermissions] Failed to start request permissions. Error: ${JSON.stringify(err)}`);
}) })
...@@ -178,11 +181,14 @@ ...@@ -178,11 +181,14 @@
atManager.requestPermissionsFromUser(context, permissions).then((data) => { atManager.requestPermissionsFromUser(context, permissions).then((data) => {
console.info(`[requestPermissions] data: ${JSON.stringify(data)}`); console.info(`[requestPermissions] data: ${JSON.stringify(data)}`);
let grantStatus: Array<number> = data.authResults; let grantStatus: Array<number> = data.authResults;
if (grantStatus[0] === -1) { let length: number = grantStatus.length;
for (let i = 0; i < length; i++) {
if (grantStatus[i] !== 0) {
// 授权失败 // 授权失败
} else { return;
// 授权成功 }
} }
// 授权成功
}).catch((err) => { }).catch((err) => {
console.error(`[requestPermissions] Failed to start request permissions. Error: ${JSON.stringify(err)}`); console.error(`[requestPermissions] Failed to start request permissions. Error: ${JSON.stringify(err)}`);
}) })
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册