HarmonyOS图片保存相册问题
const pictureBase64Encode = 'UklGRg4LAABxxxxxWAoAAAAQAAAxxxxxx';
function saveBase64Image() {
window.AppFunctions.callNative(createRequestJsonData("SystemUtil", "savePicture", `{"base64Data": "${pictureBase64Encode}" }`));
}
HybridSystemService中添加savePicture的方法:
import util from '@ohos.util'
@HybridMethod()
public savePicture(jsCallProto: JsCallProto) {
let jsonData = JSON.parse(jsCallProto.getJsonData()) as Record<string, string>;
let base64Data = jsonData?.base64Data ?? "";
if (base64Data) {
let base64 = new util.Base64Helper()
let result = base64.decodeSync(base64Data)
//这边直接就是调用的fs.openSync,前面会拼上file的目录,如果没有文件夹会创建文件夹
let file = FileManager.openStorageFileSync("/picture/"+(new Date()).getMilliseconds()+".jpg")
SystemMediaPickerManager.savePicture(result.buffer.slice(0, result.buffer.byteLength), file).then((_) => {
jsCallProto.onSuccess("save picture success.");
}).catch((err: BusinessError) => {
jsCallProto.onFail("save picture fail, err is:" + JSON.stringify(err));
});
}
}
public static savePicture(buffer:ArrayBuffer, file: fs.File): Promise<void> {
return new Promise((resolve, reject) => {
const imageSource : image.ImageSource = image.createImageSource(buffer);
const imagePackerApi = image.createImagePacker();
let packOpts : image.PackingOption = { format:"image/jpeg", quality:100 };
imagePackerApi.packToFile(imageSource, file.fd, packOpts).then(()=>{
//移动文件到相册中,需要使用自定义dialog saveButton
let dialogHelper = new DialogHelper();
dialogHelper.showCustomDialog(file);
}).catch((error: BusinessError) => {
reject(error);
});
});
}
新建DialogHelper的类:
import { promptAction } from '@kit.ArkUI';
import { common } from '@kit.AbilityKit';
import fs from '@ohos.file.fs'
import { BusinessError } from '@kit.BasicServicesKit';
let customDialogId: number = 0
@Builder
function customDialogBuilder() {
Column() {
Text('保存图片到相册中?').fontSize(10)
Row() {
SaveButton({
text: SaveDescription.SAVE,
}).onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) => {
if (result === SaveButtonOnClickResult.SUCCESS) {
} else {
promptAction.showToast({ message: '设置存储相册权限失败!' })
}
promptAction.closeCustomDialog(customDialogId)
})
Blank().width(50)
Button("取消").onClick(() => {
promptAction.closeCustomDialog(customDialogId)
})
}
}.height(200).padding(5)
}
export class DialogHelper {
showCustomDialog(file: fs.File) {
const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
promptAction.openCustomDialog({
builder: customDialogBuilder.bind(context),
onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
console.info("reason" + JSON.stringify(dismissDialogAction.reason))
console.log("dialog onWillDismiss")
if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {
dismissDialogAction.dismiss()
}
if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
dismissDialogAction.dismiss()
}
}
}).then((dialogId) => {
customDialogId = dialogId
}).catch((error:BusinessError) => {
console.error("openCustomDialog error: " + error)
})
}
}
问题现象:dialog不显示出来,没办法使用SaveButton,图片没有保存到系统相册中。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS 保存图片到相册问题
226浏览 • 1回复 待解决
HarmonyOS 保存图片到相册权限问题
195浏览 • 1回复 待解决
HarmonyOS保存图片到系统相册问题咨询
586浏览 • 1回复 待解决
HarmonyOS 相册保存图片设置title报错
306浏览 • 1回复 待解决
如何保存网络图片到相册
676浏览 • 1回复 待解决
HarmonyOS如何把图片保存到手机相册
426浏览 • 1回复 待解决
求大佬告知如何保存图片到相册
1091浏览 • 1回复 待解决
HarmonyOS调用相册管理api,创建并保存图片至相册失败,查看图片是空白
349浏览 • 1回复 待解决
如何保存本地图片到相册中
997浏览 • 1回复 待解决
获取网络图片并保存到相册
1362浏览 • 1回复 待解决
HarmonyOS官方文档保存图片到用户相册,报系统错误
868浏览 • 1回复 待解决
怎么实现保存网络图片到相册功能?
233浏览 • 1回复 待解决
如何把图片和文案结合,保存到相册
158浏览 • 0回复 待解决
如何保存一张PNG图片到相册中
1796浏览 • 1回复 待解决
HarmonyOS 如何将base64的图片保存到相册
821浏览 • 1回复 待解决
有谁知道如何将图片保存到相册
943浏览 • 1回复 待解决
HarmonyOS 保存网络图片至图库问题
152浏览 • 1回复 待解决
图片保存到相册codelabs示例部分语法不支持高版本
1718浏览 • 1回复 待解决
HarmonyOS如何将PixelMap保存到相册?
506浏览 • 1回复 待解决
HarmonyOS base64格式的图片数据如何保存文件到本地相册?
291浏览 • 1回复 待解决
鸿蒙开发保存页面到相册
6363浏览 • 1回复 待解决
HarmonyOS 保存图片文件异常
232浏览 • 1回复 待解决
HarmonyOS 录像的视频如何保存到系统相册
930浏览 • 1回复 待解决
HarmonyOS组件截图保存到相册失败,预览图灰色
418浏览 • 1回复 待解决
HarmonyOS 如何从相册里选择图片作为头像并保存路径以便下次打开时还能显示?
123浏览 • 1回复 待解决
工具类中弹出自定义弹框,参照以下DEMO:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-arkui-uicontext-V5#opencustomdialog12