前几天在华为手机上使用阿里云 APP,从 oss bucket 中下载了一张图片,想要通过微信把它发给一个朋友时,发现在打开微信选择照片时却无法找到新下载的图片。同样在打开的 Android 系统相册中也完全找不到这个照片,虽然这个图片确确实实已经下载到了手机上。

    • 手机系统:EMUI 8.0.0
    • 阿里云 APP:V4.11.0

    后来谷歌了一下,最后找出问题所在:
    Android 只会在每次启动的时候扫描系统相册,并将扫描到的信息存储在数据库(MediaStore)。然后系统相册将直接调用数据库中的数据,所以当新的图片存到相册后,并没有将数据写入到数据库,所以在微信扫描里面自然就找不到这张图片了,所以解决的办法就是更新这个数据库。

    为了验证问题,我在手机的文件管理中找到了这张图片所在的目录,进去重新刷新该文件夹,然后打开系统相册,果然就可以看到这张下载的图片了。

    后来,向阿里云反馈也的确证实了该问题:
    发现了阿里云 APP 的一个小 BUG - 图1

    虽然本人对 Android 开发完全不懂, 但也想了解一下,在 Android 手机中下载图片怎么样才能实时刷新系统相册呢?

    首先,是在 Adnroid 中保存图片。这里面会涉及到是否能指定路径保存和名称,方法可能有如下两种:

    • 一,自己写方法。
    • 二,调用系统提供的插入图库的方法保存图片。

    其次,是更新系统图库。这里有三种策略:

    • 重新扫描整个存储空间,将数据库更新。扫描整个 sd 卡的广播,如果 sd 卡里面东西多会扫描很久,用户体验差。
    • 将新的数据加到数据库。样操作对数据的安全性要求很高。
    • 直接扫描新添加的文件(或者是该文件所在的文件夹)。

    关于在代码层面刷新系统 Media,网络上面主要几种方法:

    • 通过操作 MediaStore 类。
    • 发送广播更新 MediaStore。
    • 通过操作 MediaScannerConnection 类。

    当然或许会有更多的解决方法,小编作为一个 Adnroid 的小白,就不在这里啰嗦了。