解除应用访问限制
场景介绍
当用户希望解除用户访问某些特定应用的限制时,可以调用解除应用访问限制的接口。根据参数中传入的token以及限制类型(允许/禁用),将允许/禁用清单解析后,解除对应的应用的限制。
业务流程

流程说明:
- 应用调用解除应用访问限制的接口,拉起健康使用设备查询开发者是否已申请权限,以及用户是否授权。
- 若开发者没有权限或用户没有授权,则抛出相应错误码。若开发者有权限且用户已授权,则解析参数中传入的限制类型以及token。
- 该接口判断传入的应用列表,是否其中有应用被其他三方应用或健康使用设备设置的策略给管控,若有,则对应的应用不解除限制。
- 对剩余的应用解除限制,返回处理结果。
接口说明
解除应用访问限制的关键接口如下表所示:
| 接口名 | 描述 |
|---|---|
| releaseAppsRestriction(appInfo: AppInfo, restrictionType: RestrictionType): Promise<void> | 根据传入的应用token数组和限制类型(允许/禁用清单),解除对应应用的访问限制。 |
定义释义:
限制类型为禁用清单时,对应用数组中的应用做解除限制。
限制类型为允许清单时,对应用数组以外的应用做解除限制。
边界场景:
1、如果传入的应用数组为空,限制类型为禁用清单,则不对任何应用做解除限制。
2、如果传入的应用数组为空,限制类型为允许清单,则对除了系统内置允许清单应用(电话、联系人、设置、未成年人模式)、管控发起应用本身、已授权的管控应用之外的所有应用做解除限制。
3、同一个管控应用的限制和解除限制需对称使用,即解除限制必须和其限制的类型匹配上,如不匹配,则为参数错误;如果之前没有做过setAppsRestriction管控,也为参数错误。
4、如果要对之前用禁用清单方式做限制的应用做解除限制,则传入的应用数组需包含所有的禁用清单应用,才可全部解除。
5、传入的应用数组中如果包含了限制时传入的应用数组以外的应用(或包含无效token),则为参数错误。
开发前提
解除应用访问限制需要申请用户授权,请先参考请求用户授权章节完成用户授权。
开发步骤
-
导入相关模块。
import { guardService, appPicker } from '@kit.ScreenTimeGuardKit';import { hilog } from '@kit.PerformanceAnalysisKit';import { BusinessError } from '@kit.BasicServicesKit'; -
调用releaseAppsRestriction,解除应用访问限制。
@Entry@Componentstruct TestPage {build() {Column() {Button("TestReleaseAppsRestriction").onClick(async () => {try {// 先调用startAppPicker获取相应应用的tokenconst tokens = await appPicker.startAppPicker(this.getUIContext().getHostContext(), { appTokens: [] });const appInfo: guardService.AppInfo = { appTokens: tokens };const restrictionType: guardService.RestrictionType = guardService.RestrictionType.BLOCKLIST_TYPE;await guardService.releaseAppsRestriction(appInfo, restrictionType);} catch (err) {const message = (err as BusinessError).message;const code = (err as BusinessError).code;hilog.error(0x0000, `ScreenTimeGuard:releaseAppsRestriction`, `releaseAppsRestriction failed with error code: ${code}, message: ${message}`)}})}}}