Android MediaScanner 总纲

1. MediaScanner HEAD

2. 应用层 MediaProvider

packages\providers\MediaProvider

(1) MediaProvider

packages\providers\MediaProvider\MediaProvider.java

MediaProvider继承于ContentProvider,主要用于创建媒体库的数据库表.

详细内容请查阅如何创建Provider.

MediaProvider中包涵一个BroadcastReceiver,用于监听SDCard挂载/卸载

(2) MediaReceiver

监听扫描事件, 调用MSS

Action :

Intent.ACTION_BOOT_COMPLETED, Intent.ACTION_MEDIA_MOUNTED

scan volume MediaScannerService

else

scanFile filepath MediaScannerService

(3) MediaScannerService MSS

onStartCommand==>ServiceHandler==>scanFile

当我们调用startService的时候,如果对应的Service还未创建就会调用onCreate方 法===方法。每次startService的时候就调用onStartCommand,所以ServiceHandler就在此发送消息了。

call: MediaScanner :: scanSingleFile, scanDirectories

3. JAVA 层

Call Stack : Google注解

/*
 * In summary:
 * Java MediaScannerService calls
 * Java MediaScanner scanDirectories, which calls
 * Java MediaScanner processDirectory (native method), which calls
 * native MediaScanner processDirectory, which calls
 * native MyMediaScannerClient scanFile, which calls
 * Java MyMediaScannerClient scanFile, which calls
 * Java MediaScannerClient doScanFile, which calls
 * Java MediaScanner processFile (native method), which calls
 * native MediaScanner processFile, which calls
 * native parseMP3, parseMP4, parseMidi, parseOgg or parseWMA, which calls
 * native MyMediaScanner handleStringTag, which calls
 * Java MyMediaScanner handleStringTag.
 * Once MediaScanner processFile returns, an entry is inserted in to the database.
 */

(1) MediaScanner

frameworks/base/media/java/android/media/MediaScanner.java

Call JNI

    static {
        System.loadLibrary("media_jni");
        native_init();
    }

scanDirectories ? jni processDirectory

scanSingleFile ==> MyMediaScannerClient.doScanFile

deal with image, audio, video ? jni processFile

4. JNI层

(1) android_media_MediaScanner.cpp

frameworks\base\media\jni\android_media_MediaScanner.cpp

MediaScanner *mp = getNativeScanner_l(env, thiz);

mp->processDirectory(pathStr, myClient);

mp->processFile(pathStr, mimeTypeStr, myClient);

android_media_MediaScanner中比较重要的是MyMediaScannerClient类, 该类会被继续传到底层,用于调用java层(MediaScanner.java)的 scanFile, handleStringTag, setMimeType

5. Server Proxyer

libmedia – libmedia.so

frameworks\av\media\libmedia\MediaScanner.cpp

处理具体的文件

如果是文件夹需要返回JAVA层中,采用scanFile处理

6. Server

frameworks\av\media\libstagefright\StagefrightMediaScanner.cpp

libstagefright.so

根据文件后缀判断可处理的文件

然后通过MediaMetadataRetriever获取视频的详细信息,

最后同过handleString一步一步向上传, 在MediaScannerService中把信息写入数据库.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 04:58:42

Android MediaScanner 总纲的相关文章

Android MediaScanner总结

1. 简介 自此Android MediaScanner的源代码分析已经全部写完,前后断断续续写了大半个月的时间,至今刚刚完成.现在对MediaScanner做一下总结.(其实也没啥好总结的,MediaScanner整体架构还是参考Android MediaScanner 总纲 ) 2. 纲领性文章 Android MediaScanner 总纲 此文对MediaScanner架构做了详细描述,包括MediaScanner系统分层,涉及的代码,调用顺序等做了描述,其中几张图可以详细看看. 如果想

转自:Android MediaScanner 详尽分析

转自http://blog.csdn.net/Innost/article/details/6083467 一 MediaScannerService 多媒体扫描是从MediaScannerService开始的.这是一个单独的package.位于 packages/providers/MediaProvider:含以下Java文件 l         MediaProvider.java l         MediaScannerReceiver.java l         MediaSca

Android MediaScanner:(一)MediaScanner总体架构

Android MediaScanner:(一)MediaScanner总体架构 分类: Android android.multimedia2012-05-19 18:29 5050人阅读 评论(5) 收藏 举报 androidservice数据库工作interfaceinsert 田海立@csdn 2012-05-19 本文是笔者的分析归纳,并用UML图(Class Diagram/Sequence Diagram)来呈现.虽然来源于对Android源码的分析,但文中不会占用大量篇幅罗列源码

Android MediaScanner源代码解析

1. 简介 MediaScanner向上和MediaProvider.MediaScannerService交互, 响应其请求; 向下和JNI交互. MediaScanner主要工作内容: (1)接收MediaScannerService的scanDirectories和scanSingleFile请求 (2)获取各个ContentProvider 环境(Audio,Video,Image,File) initialize (3)获取需要扫描文件列表,移除已删除文件信息 prescan (4)通

Android MediaScanner使用简介

1. 执行扫描 只有系统开机的时候才会执行MediaScanner,其它情景下需要手动执行扫描(拍摄,下载等). 手动执行扫描的方法是发送MediaScanner广播: 1.1 扫描指定文件: Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 1.2 扫描指定目录: "android.intent.action.MEDIA_SCANNER_SCAN_DIR" <span style="font-size:14px;">sendB

Android MediaScanner.cpp 源代码解析

1. 简介 实现对文件夹的递归扫描 libmedia – libmedia.so frameworks\av\media\libmedia\MediaScanner.cpp 2. 对文件的扫描 由JNI调用processDirectory,然后由doProcessDirectory和doProcessDirectoryEntry实现对文件夹的递归扫描. 2.1 doProcessDirectory 循环扫描该文件夹内的所有项 MediaScanResult MediaScanner::doPro

Android MediaScannerJNI源代码具体解释

1.简单介绍 MediaScannerJNI的在MediaScanner中的地位可參考 Android MediaScanner 总纲 MediaScanner JNI文件名称: android_media_MediaScanner.cpp 位置: frameworks\base\media\jni\android_media_MediaScanner.cpp android_media_MediaScanner是JAVA层和server层沟通的一个桥梁 android_media_MediaS

Android MediaScannerJNI源码详解

1.简介 MediaScannerJNI的在MediaScanner中的地位可参考 Android MediaScanner 总纲 MediaScanner JNI文件名: android_media_MediaScanner.cpp 位置: frameworks\base\media\jni\android_media_MediaScanner.cpp android_media_MediaScanner是JAVA层和server层沟通的一个桥梁 android_media_MediaScan

Android 之MediaScanner流程解析

MediaScanner详解 OK, 我们现在开始来大概分析一下android framework中MediaScanner部分的流程,若大家发现分析过程中有错误,欢迎拍砖指正. 分析流程之前,我们先给自己定个要用MediaScanner解决的问题,这样我们才会有目标感,才知道我们要干什么.否则,干巴巴的分析流程,一般都会很容易的迷失在各种code的迷雾中. 我们这里要定的目标是:获取某个MP3文件的artist & album. 我们可以假定,现在有个媒体播放器,在播放music的时候,需要在