HarmonyOS 鸿蒙Next里web如何实现长按保存图片到相册
HarmonyOS 鸿蒙Next里web如何实现长按保存图片到相册 鸿蒙里的web不通过js,如何实现长按保存图片到相册?
4 回复
楼主您好,您看下这个使用web组件的下载能力说明呢
使用Web组件的下载能力-管理网页文件上传与下载-ArkWeb(方舟Web)-应用框架 | 华为开发者联盟 (huawei.com)
保存用户文件-选择与保存用户文件-用户文件-Core File Kit(文件基础服务)-应用框架 | 华为开发者联盟 (huawei.com)
更多关于HarmonyOS 鸿蒙Next里web如何实现长按保存图片到相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
最终用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?