HarmonyOS 安全控件无法在弹窗中使用

代码如下:

安全控件放在页面里能拿到权限,放在弹窗里就不行:

长按顶部图片,调起弹窗,点击保存图片(安全控件),申请权限失败

单击底部保存图片(安全控件)按钮,申请权限成功。

import { promptAction } from '@kit.ArkUI'; 
import { common } from '@kit.AbilityKit'; 
 
@Entry 
@Component 
struct TestPage { 
  controller: TextController = new TextController(); 
  options: TextOptions = { controller: this.controller }; 
 
  build() { 
    Row() { 
      Column({ space: 10 }) { 
        Image($r('app.media.app_icon')) 
          .height(200) 
          .width('100%') 
          .objectFit(ImageFit.Contain) 
          .draggable(false) 
          .gesture( 
            LongPressGesture({ repeat: false }) 
              .onAction(() => { 
                this.showDialog() 
              }) 
          ) 
 
        SaveButton({ 
          text: SaveDescription.SAVE_IMAGE, 
          buttonType: ButtonType.Normal 
        }).onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) => { 
          if (result === SaveButtonOnClickResult.SUCCESS) { 
            promptAction.showToast({ message: '设置权限成功!' }) 
          } else { 
            promptAction.showToast({ message: '设置权限失败!' }) 
          } 
        }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
    .backgroundColor(0xF1F3F5) 
  } 
 
  showDialog() { 
    const controller = new CustomDialogController({ 
      builder: SaveImageDialog({ 
        onSave: () => { 
          controller.close() 
        }, 
        onClose: () => { 
          controller.close() 
        } 
      }), 
      alignment: DialogAlignment.Bottom, 
      customStyle: true, 
    }) 
    controller.open() 
  } 
} 
 
@CustomDialog 
export struct SaveImageDialog { 
  private controller?: CustomDialogController; 
  onSave?: () => void; 
  onClose?: () => void; 
 
  build() { 
    Column() { 
      SaveButton({ 
        text: SaveDescription.SAVE_IMAGE, 
        buttonType: ButtonType.Normal 
      }).fontColor(Color.Black).fontSize(16) 
        .backgroundColor(Color.Transparent) 
        .width('100%') 
        .padding(15) 
        .onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) => { 
          if (result === SaveButtonOnClickResult.SUCCESS) { 
            const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; 
            this.onSave?.() 
          } else { 
            promptAction.showToast({ message: '设置权限失败!' }) 
          } 
        }) 
 
      Line() 
        .width('100%').height(0.5) 
        .backgroundColor(Color.Black) 
 
      Text('取消') 
        .fontColor(Color.Black).fontSize(16) 
        .textAlign(TextAlign.Center) 
        .width('100%') 
        .padding(15) 
        .onClick(() => { 
          this.onClose?.() 
        }) 
    }.backgroundColor(Color.White) 
  } 
}
HarmonyOS
2024-08-03 13:35:54
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
jmzgh

安全控件不能放到屏幕边缘,如果超出屏幕范围一点也会失败。建议使用该组件的时候,先获取屏幕宽度,再设置具体的数值。

分享
微博
QQ
微信
回复
2024-08-04 13:48:28
相关问题
image组件中使用bindContextMenu报错
131浏览 • 1回复 待解决
getContext(this)能否自定义类中使用
1926浏览 • 1回复 待解决
自定义组件中使用@ObjectLink报错
363浏览 • 1回复 待解决
开源的中间件能否PolarDB中使用?
2388浏览 • 1回复 待解决
@watch中使用异步方法后UI反应慢
152浏览 • 1回复 待解决
@kit.MapKit 地图控件无法显示
1780浏览 • 1回复 待解决