HarmonyOS 鸿蒙Next 关于自定义Dialog弹不出来问题咨询
HarmonyOS 鸿蒙Next 关于自定义Dialog弹不出来问题咨询
我这边有一个需求就是,在请求系统权限时候,先弹出一个对话框告诉用户,为什么需要该权限,然后点击对话框的确定,才会去请求系统权限,然后弹出系统权限对话框。
以下是我这边封装的工具类,但是我这边自定义DIalog一直弹不出来。
比如我这边请求方法reqPermissions()传入对应的参数,此时需要弹出我这边自定义的对话框WeDialog,但是现在一直弹不出,
但是,如果我把这个dialogController,直接放入到page中,此时是可以的。
以下是我这边封装的工具类,但是我这边自定义DIalog一直弹不出来。
比如我这边请求方法reqPermissions()传入对应的参数,此时需要弹出我这边自定义的对话框WeDialog,但是现在一直弹不出,
但是,如果我把这个dialogController,直接放入到page中,此时是可以的。
export class PermissionUtils {
private dialogController?:CustomDialogController;
private permissions?: Array<Permissions>;
private permissionCallBack?: PermissionCallBack;
onCancel() {
}
async onAccept() {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
try {
atManager.requestPermissionsFromUser(getContext() as common.UIAbilityContext, this.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) {
// 用户授权,可以继续访问目标操作
if (this.permissionCallBack != null) {
this.permissionCallBack.onAllow();
}
} else {
if (this.permissionCallBack != null) {
this.permissionCallBack.onDeny();
}
}
}
}).catch((err: BusinessError) => {
if (this.permissionCallBack != null) {
this.permissionCallBack.onDeny();
}
})
} catch (err) {
if (this.permissionCallBack != null) {
this.permissionCallBack.onDeny();
}
}
}
/
* 检查是否授权
* @param permission 待检查权限
* @returns 授权状态
*/
private async checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;
// 获取应用程序的accessTokenID
let tokenId: number = 0;
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 (error) {
const err: BusinessError = error as BusinessError;
}
// 校验应用是否被授予权限
try {
grantStatus = await atManager.checkAccessToken(tokenId, permission);
} catch (error) {
const err: BusinessError = error as BusinessError;
}
return grantStatus;
}
/
* 判断是否授权
* @param permissions 待判断的权限
* @returns 已授权true,未授权false
*/
async checkPermissions(permissions: Permissions): Promise<boolean> {
//判断是否授权
let grantStatus: abilityAccessCtrl.GrantStatus = await this.checkAccessToken(permissions);
if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
//已经授权
return true;
} else {
//未授权
return false;
}
}
/**
* 发起授权 以Promise方式返回
* @param permissions 需要授权的权限
* @returns 1表示授权成功继续业务操作,-1表示用户拒绝授权
*/
reqPermissions(permissions: Array<Permissions>, remind: string, callBack: PermissionCallBack) {
this.permissions = permissions;
this.permissionCallBack = callBack;
this.dialogController = new CustomDialogController({
builder: WeDialog({
title: “温馨提示”,
content: “remind”,
cancel: this.onCancel,
confirm: this.onAccept,
}),
gridCount: 3,
autoCancel: false,
alignment: DialogAlignment.Center,
})
this.dialogController.open();
}
}
export interface PermissionCallBack {
onAllow: () => void
onDeny: () => void
}
更多关于HarmonyOS 鸿蒙Next 关于自定义Dialog弹不出来问题咨询的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
dialog弹出需要在明确UIContext的情况下,这边建议把dialog抽出来,放在一个component组件中
更多关于HarmonyOS 鸿蒙Next 关于自定义Dialog弹不出来问题咨询的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
不依赖UI组件的全局自定义弹出框 (openCustomDialog)(推荐)
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-uicontext-custom-dialog-V13
针对HarmonyOS 鸿蒙Next系统中自定义Dialog弹不出来的问题,以下是一些可能的原因及解决方案:
-
权限与状态:
- 确保Dialog的创建与显示代码在UI线程中执行。
- 检查是否有其他UI元素(如全屏Activity或覆盖层)遮挡了Dialog。
- 确认应用具有显示对话框的必要权限。
-
Dialog属性设置:
- 验证Dialog的
setCancelable
、setCanceledOnTouchOutside
等属性设置是否影响显示。 - 检查Dialog的布局文件,确保布局合理且没有导致Dialog无法显示的属性设置。
- 验证Dialog的
-
代码逻辑:
- 审查Dialog的创建与显示逻辑,确保在合适的时机(如Activity已创建后)调用。
- 排查是否有异常或错误导致Dialog创建失败。
-
系统兼容性问题:
- 确认是否在不同设备或系统版本上存在显示差异,可能是系统兼容性问题。
-
资源文件:
- 检查Dialog使用的资源文件(如布局、字符串等)是否加载正确。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。