摘要:拷贝文件到相册文件夹,文件管理器里看得到、相册里就是没有,只有重启手机才冒出来——根因是相册不读文件夹,读的是系统媒体数据库。文件增强新方法「保存到相册」直接走系统入库通道,存完立即可见,安卓、鸿蒙、iOS 一块积木通用。
测试参考如下:


几年来我们隔三差五收到同一种反馈:用文件增强的「拷贝文件」把图片复制到手机的相册文件夹,打开相册——没有。文件管理器里明明在,相册就是装看不见。用户试过各种办法:重启相册 App,没用;换个目录再拷一遍,没用;清相册缓存,还是没用。只有重启手机,图片才「唰」地一下全冒出来。
有位用户的描述特别传神:「感觉相册在装睡,只有重启手机这个闹钟才能叫醒它。」
说实话,这个问题我们一开始也没当回事,跟着「放文件」的思路排了一遍:以为是路径不对,让用户从 Pictures 换到 DCIM;以为是权限,加了一遍又一遍;以为是相册缓存,教大家去清。全都治标不治本——因为大家的思路从一开始就锚在同一件事上:把文件放对地方。
直到这次下决心彻查,把安卓的媒体机制从头到尾捋了一遍才发现:方向错了。
问题从来不在「文件放哪儿」,而在「文件根本不该这么进相册」。
安卓手机上有个系统级的「媒体数据库」,正式名字叫 MediaStore。相册 App 打开时,不是去扫描文件夹,而是查这个数据库:「库里有哪些图片?」数据库里有什么,相册就显示什么。
这就好比图书馆:馆里进了一本新书,只要没在检索系统里登记,读者在检索机上就永远查不到——书明明就在馆里。
拷贝文件,只是把书搬进了馆;重启手机,相当于图书馆做了一次全馆盘点,把每本书都补录进检索系统,相册这才「看见」你的图片。
理解了这个机制,前面所有怪现象都顺理成章了:

想让图片「保存完立刻出现在相册」,就不能走「拷文件」这条路,要走系统的入库通道。我们给文件增强组件加了一个新方法——保存到相册(SaveToGallery),它在三个平台上各走各的正道:
图片会存进 DCIM 目录(和相机拍的照片同级),视频、音频也支持,分别进各自的标准位置。第二个参数是相册名,各大相册 App 会把它显示成一个相册分组,帮你把 App 存的图和随手拍的分开。
设计器里拖一个文件增强,按钮点击时保存素材图:

第一个参数是源路径,// 开头表示 App 自带的素材文件,也可以是任意完整路径;方法直接返回真假,失败(比如文件不存在、格式不支持)立刻能知道,不用等事件。
很多人做的是拍照类应用:巡检打卡、作业提交、成长记录。照相机拍完照,顺手就把照片存进相册——照相机的事件参数就是照片路径,直接喂给保存到相册,一步归档:

保存完立刻打开相册,照片已经躺在「巡检记录」相册里了,不用重启任何东西。

如果已有项目在用「拷贝文件」往相册目录复制图片,改造只要一步:把拷贝文件换成保存到相册,源路径参数原样保留,目标目录参数换成相册名,其余逻辑(成功提示、计数)都不用动。拷贝文件方法本身不受影响,往普通文件夹复制文件它照样是正确的选择。

回头看,这个问题的调查过程本身就是一堂课:当所有「换地方」的尝试都失败时,该怀疑的是「放文件」这个思路本身。
手机系统早已进入「数据库管理媒体」的时代,入库才是正道——这也是为什么安卓、鸿蒙、iOS 都把「保存到相册」做成了系统通道,而不鼓励 App 直接往相册文件夹写文件。
文件增强的「保存到相册」已上线,安卓、鸿蒙、iOS 同步支持。如果你的应用里也有「存了看不见」的困扰,换上这块积木试试——保存完立刻打开相册,图就在那儿。
好了,是不是很简单,今天的分享就到此结束,咱们下回见;
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。