Android媒体库更新问题
这篇博文是从本人过去的 github pages 博客迁移过来,时间上会比较古老。
简介
Android 媒体库(MediaProvider)实际上是个 Provider。
Android 4.4 以后,当系统启动完成、SD 卡插拔或者接收到 Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 广播时,系统会扫描文件系统中的数据,将新增和删除的文件信息更新到这个 MediaProvider 中。其他应用如果要使用,直接读取这个 MediaProvider 就可以直接取得系统中媒体文件的信息。
背景
笔者遇到的问题是开发的拍照应用在拍照之后,MediaProvider 没有更新新增的照片文件,图库中也看不到新增的照片。
调查过程
从触发更新 MediaProvider 的条件来看,拍照之后应该发送广播Intent.ACTION_MEDIA_SCANNER_SCAN_FILE通知系统去更新 MediaProvider,而开发的相机应用没有进行这个动作。
笔者写了一个类用来发送Intent.ACTION_MEDIA_SCANNER_SCAN_FILE广播:
1 | public class MediaUtils { |
在拍照Activity取得MediaUtils的实例并调用setContext方法传入Activity本身。
在拍照之后取得 MediaUtils 的实例并调用updateMedia方法将新增照片的路径传入,相册里就可以显示新增的照片了。
结论
如果想要应用产生的图片或者视频被其他应用找到并使用,必须要发送Intent.ACTION_MEDIA_SCANNER_SCAN_FILE广播。
Android媒体库更新问题