Android MediaScanner:(一)MediaScanner总体架构

 

Android MediaScanner:(一)MediaScanner总体架构

分类: Android android.multimedia
androidservice数据库工作interfaceinsert

田海立@csdn

2012-05-19

 

本文是笔者的分析归纳,并用UML图(Class Diagram/Sequence Diagram)来呈现。虽然来源于对Android源码的分析,但文中不会占用大量篇幅罗列源码,所以读者在阅读本文时,手头最好有Android源码,结合源码来解读。本文讲述MediaScanner的架构。

 

        MediaScanner是Android系统Media的基础,系统启动之初,就扫描出Media文件供后续使用,有新媒体加入或者删除掉媒体文件,也需要更新相应的媒体库。Android的Music、Gallery等播放或呈现媒体文件的程序也都基于稳定的MediaScanner扫描媒体文件的结果,否则,会发现程序操作的Media文件的URI根本不是实际对应的Media文件,或者甚至来电铃声和闹铃等都会有问题。

        MediaScanner位于packages/providers/MediaProvider下,包含MediaScannerReceiver、MediaScannerService以及MediaProvider。

 

下图是packages/providers/MediaProvider下的AndroidManifest的内容:

MediaScanner Architecture

 

  •  MediaScannerReceiver是一个BroadcastReceiver,接收广播,进行媒体扫描,这也是MediaScanner提供给外界的接口之一。收到广播之后启动MediaScannerService具体执行扫描工作。
  •  MediaScannerService是一个Service,负责媒体扫描,它还要用到Framework中的MediaScanner来共同完成具体扫描工作,扫描的结果在MediaProvider提供的数据库中。
  •  MediaProvider是一个ContentProvider,媒体库(Images/Audio/Video/Playlist等)的数据提供者。负责操作数据库,并提供给别的程序insert、query、delete、update等操作。

 

另外,IMediaScannerService和IMediaScannerListenter这两个Interface提供给其他程序通过AIDLIPC调用扫描单个文件的能力。定义在framework中,Service中实现接口。

 

下面针对MediaScanner中的各个部分,分别讲解:

Android MediaScanner:(一)MediaScanner总体架构

        讲述MediaScanner的架构。

Android MediaScanner:(二)MediaScannerReceiver

        讲述MediaScannerReceiver针对来自Broadcast的不同请求所做的处理。

Android MediaScanner:(三)MediaScannerService

        对MediaScannerService的类结构进行静态分析,对创建时和启动时的工作进行动态分析,分析过程中来看MediaScannerService如何处理MediaScannerReceiver所接收到的各种扫描请求。

Android MediaScanner:(四)MediaScanner之scanSingleFile

 

        本文从MediaScannerService的scanFile入口开始,详细分析MediaScanner和MediaScannerClient对单个媒体文件的扫描处理过程。

Android MediaScanner:(五)MediaScanner之scanDirectories

Android MediaScanner:(六)MediaScanner之Native实现

Android MediaScanner:(七)MediaScanner完整过程总结

Android MediaScanner:(八)IMediaScannerService接口实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协变和逆变

http://msdn.microsoft.com/zh-cn/library/vstudio/dd997386.aspx转载于:https://www.cnblogs.com/mingyongcheng/archive/2012/11/15/2771568.html

报表系统FineReport通过权限控制数据访问方案

2019独角兽企业重金招聘Python工程师标准>>> 问题:实际应用环境中,不同角色的人可能对数据具有不同的访问权限,通过直接在SQL语句中筛选出需要的数据制作模板可以解决该需求,但对于角色较多的情况,就需要制…

SkyWalking配上告警更优秀

前言对于监控系统来说,不可能让人一直盯着监控看板,而更多的是以自动提醒的方式,比如邮件、短信或微信推送等,当达到或超出预设的告警指标时,就自动发送消息提醒,下面就来说说如何配置SkyWalking的告警。正…

python sqllite远程_Python实现Sqlite将字段当做索引进行查询的方法

本文实例讲述了Python实现Sqlite将字段当做索引进行查询的方法。分享给大家供大家参考,具体如下:默认从sqlite中获取到的数据是数字索引的, 在开发阶段经常有修改数据库所以显得不太方便, 其实在python源码里就有解决方案, 直接读sqlite3的源码, 摸索了一…

神抓拍!2020搞笑野生动物摄影大赛,哈哈哈哈哈笑到头掉

全世界只有3.14 % 的人关注了爆炸吧知识图片来自CWPAs 2020小动物们到底能有多好玩让我们来看看今年的搞笑野生动物摄影大赛吧保准叫你从头笑到尾(以下是入围作品)“飚自行车的”猴看起来像个酷猴▲摄影:Yevhen Samuchenko真情实感演绎“我太…

【转载】ESFramewor使用技巧(2)-- 在插件中使用NHibernate

ESFramewor使用技巧(2)-- 在插件中使用NHibernate 我们来讨论一下这种情景,你采用基于ESFramework的4层架构进行应用开发,你分析用户的需求,并将其分类整理为几大块,考虑每一块使用…

如何在ashx页面获取Session值(未将对象引用设置到对象的实例) (转)

如何在ashx页面获取Session值(未将对象引用设置到对象的实例) 分类: .Net学习笔记 Session 2011-11-30 10:25 902人阅读 评论(1) 收藏 举报在一般事务处理页面,可以轻松的得到 Request,Response对象,从而进行相应的操作,如下&am…

java字符串从后截取_java 字符串截取的几种方式(转)

众所周知,java提供了很多字符串截取的方式。下面就来看看大致有几种。 1.split()+正则表达式来进行截取。 将正则传入split()。返回的是一个字符串数组类型。不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时。 String str = "abc,12,3yy98,0"; Strin…

REST 深度进阶

最近团队人数在扩大,才发现,REST 这个出来很多年头的东西,居然还有人用不好。说起来,REST 出现已经很久了。从早期的三层架构,到现在的多层、微服务,核心内容之一就是 API --- 从非常简单的 API&#xff0c…

绝不翻车珍珠奶茶做法

1 如何在家自制珍珠奶茶▼2 儿子,妈妈给你烤小饼干哦▼3 放假太久了连自己哪个班都忘了▼4 想问下,鸟是在哪都能起窝吗?▼5 不到万不得已,绝不去做▼6 这个店名太童年阴影了▼7 小鸡做错了什么?▼你点的每个赞&…

margin三个值

http://www.cnblogs.com/wangkongming/p/3204734.html margin标记可以带一个、二个、三个、四个参数,各有不同的含义。 margin: 20px;(上、下、左、右各20px。)margin: 20px 40px;(上、下20px;左、右40px。&#xff09…

循环控制for

<?php/***燕十八 公益PHP培训课堂地址:YY频道88354001 学习社区:www.zixue.it **/ /***for(初始条件1;判断条件2;4:钱减少) {执行语句3; }***/for($i10; $i >1; $i--) {echo $i,<br />; }/** 扩展一下for循环,同时循环两个数 打印 5 1 4 2 3 3 2 4 1 5 **/f…

常用JS代码大全

事件源对象 event.srcElement.tagName event.srcElement.type捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey事件返回值 event.returnValue鼠标位置 event.x event.y窗体活…

施一公:“中国式科研”误国误民!表面上一片繁荣,实则深藏危机

全世界只有3.14 % 的人关注了爆炸吧知识论文和科技实力是两回事在全国政协十三届一次会议上&#xff0c;中国科学院院士、清华大学原副校长施一公曾说道&#xff1a;“我以前曾经预测&#xff0c;中国会在2020年论文数超过美国&#xff0c;没想到我们提前完成了。”但面对这项数…

正确使用和理解C#中的闭包

定义 我们把在Lambda表达式(或匿名方法)中所引用的外部变量称为捕获变量。而捕获变量的表达式就称为闭包。捕获变量 捕获的变量会在真正调用委托时“赋值”&#xff0c;而不是在捕获时“赋值”&#xff0c;即总是使用捕获变量的最新的值。如下代码所示&#xff0c;调用委托时&a…

java merge css_一句命令快速合并 JS、CSS

在项目开发环境下&#xff0c;我们会把 JS 代码尽可能模块化&#xff0c;方便管理和修改&#xff0c;这就避免不了会出现一个项目自身 JS 文件数量达到 10 个或者更多。而项目上线后&#xff0c;会要求将所有 JS 文件合并为 1 个或者几个&#xff0c;手动的操作虽然也不是问题&…

tomcat对于web.xml的security-constraint使用的处理机制

知识点 web.xml中<security-constraint> 的子元素 <http-method> 是可选的&#xff0c;如果没有 <http-method> 元素&#xff0c;这表示将禁止所有 HTTP 方法访问相应的资源。子元素 <auth-constraint> 需要和 <login-config> 相配合使用&#x…

重磅公开!36个高考数学破题大招

前段时间&#xff0c;超模君发了关于极值点偏移问题的总结资料&#xff0c;朋友们都觉得内容整合得十分详细。同时&#xff0c;也有不少很多朋友留言说希望有其他高考数学常考问题的解题总结。确实&#xff0c;毕竟高考涉及的内容非常多&#xff0c;比如说参数范围问题、数列求…

Linux服务器数据备份

2019独角兽企业重金招聘Python工程师标准>>> 服务器上的数据是如此重要&#xff0c;以至于我们定期要对其进行备份&#xff01;这里讲一下mysql的备份和使用rsync同步服务器上的文件&#xff0c;从而实现多台linux服务器之间的文件的备份。 一 Mysql备份 mysql的备份…

Serilog 日志框架如何自动删除超过 N 天的日志 ?

咨询区 JohnB&#xff1a;我的程序使用的日志框架是 Serilog&#xff0c;我是按天分割日志文件的&#xff0c;由于每日文件都比较大&#xff0c;我经常手工删除&#xff0c;但这样做很傻&#xff0c;请问日志框架有没有自动帮我删除 N 天之间的日志呢&#xff1f;回答区 someth…