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中把信息写入数据库.
Android MediaScanner 总纲的更多相关文章
- Android MediaScanner:(一)MediaScanner总体架构
Android MediaScanner:(一)MediaScanner总体架构 分类: Android android.multimedia2012-05-19 18:29 5050人阅读 评论(5 ...
- Android MediaScanner 详尽分析
[Innost]: http://blog.csdn.net/Innost/article/details/6083467 ====================================== ...
- Android MediaScanner
一.MediaScanner 的使用 1)Intent.ACTION_MEDIA_SCANNER_SCAN_FILE:扫描指定文件 public void scanFileAsync(Context ...
- Android MediaScanner使用简单介绍
1. 运行扫描 仅仅有系统开机的时候才会运行MediaScanner,其他情景下须要手动运行扫描(拍摄,下载等). 手动运行扫描的方法是发送MediaScanner广播: 1.1 扫描指定文件: In ...
- Android MediaScannerJNI源代码具体解释
1.简单介绍 MediaScannerJNI的在MediaScanner中的地位可參考 Android MediaScanner 总纲 MediaScanner JNI文件名称: android_me ...
- Android媒体扫描详细解析之一(MediaScanner & MediaProvider)
用过Android手机的同学都知道,每次开机的时候系统会先扫描sdcard,sdcard重新插拔(挂载)也会扫描一次sdcard. 为什么要扫描sdcard,其实是为了给系统的其他应用提供便利,比如, ...
- [深入理解Android卷一全文-第十章]深入理解MediaScanner
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该由于纸质媒介的问题而中断.所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- <Android Framework 之路>Android5.1 MediaScanner
前言 MediaScanner是Android系统中针对媒体文件的扫描过程,将储存空间中的媒体文件通过扫描的方式遍历并存储在数据库中,然后通过MediaProvider提供接口使用,在Android多 ...
- 深入理解Android(5)——从MediaScanner分析Android中的JNI
前面几篇介绍了Android中的JNI和基本用法,这一篇我们通过分析Android源代码中的JNI实例,来对JNI部分做一个总结. 一.通向两个不同世界的桥梁 在前面我们说过,JNI就像一个桥梁,将J ...
随机推荐
- formValidator输入验证、异步验证实例 + licenseImage验证码插件实例应用
实例技术:springmvc 实现功能:完整用户登录流程.输入信息规则校验.验证码异步校验. 功能清单: 1.springmvc控制器处理get请求(/member/login.html),进行静态页 ...
- linux的0号进程和1号进程
linux的 0号进程 和 1 号进程 Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2) * idle进程由系统自动创 ...
- 跟我学SharePoint2013视频培训课程——设置列表名称、描述、导航等基本信息(12)
课程简介 第12天,怎样在SharePoint 2013设置列表名称.描述.导航等基本信息. 视频 SharePoint 2013 交流群 41032413
- Android应用的自动更新模块
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- Android_Bitmap_图片的二次采样并生成缩略图
1.Bitmap概述 Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (discouraged)), 其中Bitmap位图#ffff ...
- nginx 配置支持URL HTML5 History 模式 与 设置代理
拾人牙慧:https://segmentfault.com/q/1010000007140360 nginx 配置支持URL HTML5 History 模式 location / { try_fil ...
- 纯干货,Spring-data-jpa详解(转)
本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...
- 学习Git---20分钟git快速上手
学习Git-----20分钟git快速上手 在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是 ...
- MySql(五):MySQL数据库安全管理
一.前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本. 失去了数据,可能就失去了一切 本章将针对mysql的安全相关内容进 ...
- 【android开发】如何在Linux平台下安装JDK环境
原文:http://android.eoe.cn/topic/android_sdk Linux平台JDK安装 本文主要描述如何在Linux平台下安装JDK环境.进入网页:http://www.ora ...