HarmonyOS图片保存相册问题

const pictureBase64Encode = 'UklGRg4LAABxxxxxWAoAAAAQAAAxxxxxx'; 
 
function saveBase64Image() { 
  window.AppFunctions.callNative(createRequestJsonData("SystemUtil", "savePicture", `{"base64Data": "${pictureBase64Encode}" }`)); 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

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); 
}); 
}); 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

新建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) 
    }) 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.

问题现象:dialog不显示出来,没办法使用SaveButton,图片没有保存到系统相册中。

HarmonyOS
2024-09-02 08:47:41
832浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Heiang
分享
微博
QQ
微信
回复
2024-09-02 16:48:24
相关问题
HarmonyOS 保存图片相册问题
1252浏览 • 1回复 待解决
HarmonyOS 保存图片相册权限问题
1111浏览 • 1回复 待解决
HarmonyOS保存图片到系统相册问题咨询
1491浏览 • 1回复 待解决
HarmonyOS 图片保存相册
831浏览 • 1回复 待解决
HarmonyOS 保存图片到系统相册
977浏览 • 1回复 待解决
HarmonyOS 保存图片到本地相册
994浏览 • 1回复 待解决
HarmonyOS 截图保存图片相册
818浏览 • 1回复 待解决
HarmonyOS 实现保存图片相册
1117浏览 • 1回复 待解决
HarmonyOS 图片保存相册报错
1038浏览 • 1回复 待解决
HarmonyOS 相册保存图片设置title报错
1063浏览 • 1回复 待解决
HarmonyOS 如何将图片保存相册
782浏览 • 1回复 待解决
如何保存网络图片相册
1663浏览 • 1回复 待解决
HarmonyOS如何把图片保存到手机相册
1580浏览 • 1回复 待解决
获取网络图片保存相册
2847浏览 • 1回复 待解决
如何保存本地图片相册
2162浏览 • 1回复 待解决
求大佬告知如何保存图片相册
2101浏览 • 1回复 待解决
HarmonyOS image.PixelMap保存相册问题
982浏览 • 1回复 待解决
HarmonyOS h5如何实现保存图片相册
1089浏览 • 1回复 待解决