1. 概述
MediaScanner 是 Android 多媒体系统中重要的一员,MediaScanner 与媒体文件预扫描相关。我们知道,Android 系统每次开机或者重新插拔 SD 卡之后都会去扫描系统存储空间中的媒体文件,并将媒体文件相关的信息存储到媒体数据库中。这样后续 Gallery、Music、VideoPlayer 等应用便可以直接查询媒体数据库,根据需要提取信息做显示。
如果进入音乐播放器应用之后再去扫描,可想而知,你会厌恶这个应用,因为我们会觉得它反应太慢了。有了 MediaScanner 的预扫描,一打开音乐播放器就能直接去数据库中读取歌曲的时长、演唱者、专辑等信息显示给用户,这样用户体验会好很多。
下面就来分析媒体文件扫描的原理。
2. android.process.media 分析
多媒体系统的媒体扫描功能,是通过一个 apk 应用程序提供的,它位于 packages/providers/MediaProvider 目录下。查看该应用程序的的 AndroidManifest.xml 文件可知,该 apk 运行时指定了一个进程名:android.process.media
<application android:process="android.process.media"
通过 ps 命令可以看到这个进程,另外,从该 apk 的 AndroidManifest 文件可以看到,android.process.media 使用了 Android 应用程序四大组件中的其中三个组件:
- MediaScannerService(从 Service 派生