HarmonyOS 鸿蒙Next里web如何实现长按保存图片到相册

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next里web如何实现长按保存图片到相册 鸿蒙里的web不通过js,如何实现长按保存图片到相册?

4 回复

最终用web的长按监听,获取长按控件的src实现了

Web({
  src: 'https://www.baidu.com',
  controller: this.webViewController
})
.onContextMenuShow((event) => {
  if (event) {
    let mediaType = event.param.getMediaType()
    let hitValue = this.webViewController.getHitTestValue()
    this.imgBase64 = hitValue.extra
    //长按的是图片,且图片是base64的,因getSourceUrl没取到,用extra取到了
    if (mediaType === ContextMenuMediaType.Image &&
    this.imgBase64.startsWith("data:image")) {
      this.showMenu = true
    }
  }
  return false
})
.bindPopup(this.showMenu,
  {
    builder: this.menuBuilder(),
    enableArrow: false,
    placement: Placement.TopLeft,
    mask: false,
    offset: { x: 0, y: 0 },
    onStateChange: (e) => {
      if (!e.isVisible) {
        this.showMenu = false;
        this.result?.closeContextMenu();
      }
    }
  })
/**
 * 因下载图片需要savebutton,增加下载图片确认弹窗,包含savebutton
 */
@Builder
function menuBuilder() {
  Column() {
    Text('您确定要下载该图片吗?')
      .fontSize(18)
      .fontWeight(FontWeight.Regular)
      .margin({ top: 20, bottom: 15 })

    Row() {
      Button('取消')
        .height(44)
        .backgroundColor($r('app.color.color_white'))
        .fontColor($r('app.color.color_77849E'))
        .borderColor($r('app.color.color_DEE3EF'))
        .borderWidth(1)
        .borderRadius(22)
        .width('45%')
        .onClick(() => {
          this.showMenu = false;
        })

      Blank().width(10)

      SaveButton()
        .width('45%')
        .height(44)
        .borderRadius(22)
        .backgroundColor($r('app.color.color_007AFF'))
        .onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) => {
          if (result === SaveButtonOnClickResult.SUCCESS) {
            let arr = this.imgBase64.split(",")
            if (arr.length > 0) {
              let base64 = arr[arr.length-1] as string
              ImageUtil.base64ImageSaveToGallery(base64)
            }
            this.showMenu = false;
          }
        })
    }
    .margin({ top: 20, bottom: 20 })
    .justifyContent(FlexAlign.Center)
  }
  .width('80%')
  .backgroundColor(Color.White)
  .borderRadius(10)
}

一头雾水,哪来的ImageUtil?

在HarmonyOS鸿蒙Next系统中,实现Web应用中长按保存图片到相册的功能,可以通过以下步骤进行:

  1. 监听长按事件:首先,在Web页面中为图片元素添加长按事件监听。这通常通过JavaScript实现,例如使用addEventListener方法监听contextmenumousedown事件,并结合一个定时器来判断是否为长按。

  2. 触发保存逻辑:当检测到长按事件后,触发保存图片到相册的逻辑。由于Web应用直接访问设备文件系统受限,这通常需要通过调用鸿蒙系统提供的特定API或利用鸿蒙的Web能力扩展(如鸿蒙快应用或特定Web组件)来实现。

  3. 调用系统保存接口:在鸿蒙系统中,可能需要利用鸿蒙的JS扩展API(如harmony.system.saveImage,注意此API为假设示例,实际API需参考鸿蒙官方文档)来保存图片到相册。这部分实现依赖于鸿蒙系统对Web应用的支持程度及提供的API。

  4. 处理权限问题:保存图片到相册涉及用户隐私,因此应用需申请并获取相应权限。在鸿蒙系统中,这通常通过配置文件声明权限并在运行时请求用户授权。

请注意,由于鸿蒙系统的不断更新和Web应用能力的扩展,具体实现细节可能有所变化。建议参考最新的鸿蒙开发者文档获取准确信息。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部