鸿蒙保存图片到相册
发表于 2025-08-25 09:54:50

踏入鸿蒙世界的敲门砖,标志着您在技术征途上的全新起点,提升就业竞争力,获得行业认可,点亮职业成长先机,快人一步抢占未来应用开发赛道!https://developer.huawei.com/consumer/cn/training/dev-cert-detail/101666948302721398?ha_source=hmosclass-bokeyuan&ha_sourceId=89000444

在其它手机端,若想保存图片到相册,需要申请对应的权限,而鸿蒙中对应的权限为受限开放权限,普通应用一般不让申请,这个时候我们可以使用安全保存控件来临时申请权限,用于保存图片到相册。

受限开放权限

应用权限分为三类,一类是对所有应用开放,所有应用均可申请使用;一类是受限开放权限,仅少量符合特殊场景的应用可在通过审批后,使用受限权限;最后一类是仅对 MDM(Mobile Device Management)设备管理应用开放。

保存图片到相机涉及到的权限是 ohos.permission.WRITE_IMAGEVIDEO,仅特殊场景与功能才可申请此权限,例如应用需要克隆、备份或同步图片 / 视频类文件,其它场景下使用安全控件来临时申请权限。

使用安全控件保存本地图片到相机

我们先使用安全控件让用户点击临时获取权限,获取到权限后,再使用 photoAccessHelper 来将我们本地的图片保存在相册,示例如下

图片 1.png

以上示例请保证 icon.png 在本地真实的存在。当我们使用 helper 调用 applyChanges 时,因为是在安全控件点击后调用的,临时获取权限,可以正常执行,若不在安全控件内,则需保证已获取对应的权限。

使用安全控件保存服务端图片到相机

服务端图片我们一般使用下载服务将图片下载到本地,若本地不需要备份,则直接将下载好的图片 buffer 保存到相册即可。我们将本地图片转成 buffer 来模拟服务端下载后的图片,再使用 photoAccessHelper 创建一个相册图片资源,并将我们的图片 buffer 写入到这个图片资源中,就可以将图片保存到相册了,示例如下

图片 2.png

使用保存确认弹窗保存图片

前面的方式都是强依赖于安全控件,但在有些场景下,我们没办法使用安全控件,比如在 H5 页面中,再比如在 Flutter 页面中等等,这个时候我们可以借助保存确认弹窗来保存图片。当我们通过 photoAccessHelper 调用 showAssetsCreationDialog 时,系统会弹出一个确认弹窗,用户点击允许,则我们可以将图片保存到相册,若用户点击禁止,则不能保存图片到相册。使用这种方式,我们就不用强依赖于安全控件了,示例如下

图片 3.png

以上示例请保存 icon.png 在本地真实存在。(转载自 51CTO,作者:龙儿筝)

图片 4.png

CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
微博关注
【免责声明:CSDN本栏目发布信息,目的在于传播更多信息,丰富网络文化,稿件仅代表作者个人观点,与CSDN无关。其原创性以及文中陈述文字和文字内容未经本网证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本网不做任何保证或者承诺,请读者仅作参考,并请自行核实相关内容。您若对该稿件有任何怀疑或质疑,请立即与CSDN联系,我们将迅速给您回应并做处理。】