关于MediaProvider的修改说明DY

上传人:ji****72 文档编号:39579234 上传时间:2018-05-17 格式:DOC 页数:6 大小:79.50KB
返回 下载 相关 举报
关于MediaProvider的修改说明DY_第1页
第1页 / 共6页
关于MediaProvider的修改说明DY_第2页
第2页 / 共6页
关于MediaProvider的修改说明DY_第3页
第3页 / 共6页
关于MediaProvider的修改说明DY_第4页
第4页 / 共6页
关于MediaProvider的修改说明DY_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《关于MediaProvider的修改说明DY》由会员分享,可在线阅读,更多相关《关于MediaProvider的修改说明DY(6页珍藏版)》请在金锄头文库上搜索。

1、关于多媒体数据库的解析及修改说明关于多媒体数据库的解析及修改说明 邓 勇主要涉及文件:主要涉及文件:packagesprovidersMediaProvidersrccomandroidprovidersmediaMediaScannerReceiver.java 负责接收广播,并启动 MediaScannerService。packagesprovidersMediaProvidersrccomandroidprovidersmediaMediaScannerService.java 后台服务进程,根据 MediaScannerReceiver 的请求参数调用 MediaScanner 相关

2、方法扫描对 应的目录或文件,在对目录扫描开始及结束时都会发出相应的广播以便上层应用更新界面 显示。frameworksbasemediajavaandroidmediaMediaScanner.java 工具类,定义一系列对文件进行扫描处理的方法,调用 native 方法解析文件。frameworksbasemediajavaandroidmediaMediaFile.java 工具类,主要定义平台支持的多媒体文件类型。frameworksbasecorejavaandroidproviderMediaStore.java 工具类,主要定义几大媒体类型(Image,Audio,Video)的

3、Uri 及相关方法。packagesprovidersMediaProvidersrccomandroidprovidersmediaMediaProvider.java 多媒体数据库,定义对多媒体数据库中所有表的操作方式(增删改查) 。externalopencoreandroidmediascanner.cpp 文件处理类,主要解析文件,获取文件属性。流程简单描述:流程简单描述:MediaScannerReceiver 接收到系统广播后启动 MediaScannerService 创建进程,创建 MediaScanner 对象,MediaScanner.java 再调用 mediascan

4、ner.cpp 本地方法递归解析文件返 回音视频时长、作者等信息,然后将这些信息存入多媒体数据库以便多媒体模块获取。扫描流程图:: MediaScannerReceiver: System: MediaScannerService: MediaScanner : MediaFile : ServiceHandler: MediaProvider : FileRecord: mediascanner.cpp1 : onReceive()2 : scan()3 : onCreate()4 : handleMessage()5 : scan() 6 : openDatabase()7 : creat

5、eMediaScanner()8 : scanDirectories()9 : prescan()10 : getContentUri()1112 : query()13 : cursor14 : processDirectory()15 : doProcessDirectory()16 : scanFile()17 : doScanFile()18 : beginFile() 19 : getFileType()2021 : processFile()22 23 : endFile()24 : getContentUri()2526 : update/insert()2728 : stopS

6、elf()多媒体数据库修改说明:多媒体数据库修改说明:1. 修改背景修改背景1) G1 只支持将用户文件存储到 SD 卡上,如果没有 SD 卡,那么 Camera、Music、SoundRecorder 等多媒体模块功能皆不可用。因此,我们在手机/data/ 区域开辟了一小块空间创建目录“/data/HWUserData/”用来存储用户文件,以保证没有 SD 时用户也可以正常使用各个需要存储文件的应用。而 Android 平台主要是通过数据库 管理文件信息,因此对我们增加的目录中用户存储的所有文件,我们都必须将这些文件信 息加入数据库并加以维护。 2) 用户通过 File Manager 浏览

7、或管理文件时,如果我们的程序直接从物理设备上读取 文件信息,速度相对较慢,比如在搜索文件时,如果用户文件较多,搜索时间将会很长; 尤其是在当前搜索的文件夹中嵌套的子文件夹层次较深并且文件也较多时,搜索的过程将会是漫长的等待。 参照 Gallery,Music 等模块在操作文件时都是从多媒体数据库读取文件信息的方案, 因此我们考虑在必要的时候也通过操作数据库来管理文件。如果所有文件在数据库里面都有对应的索引信息,在浏览文件列表、搜索文件时从数 据库里查循要比直接从物理设备读取文件信息要快得多。因此我们在媒体数据库新加了一张表“file_store”用来存储非多媒体文件与文件夹的 信息(文件的大小

8、、文件名、创建时间、最后修改时间等) 。2. 修改申明修改申明1) 关于增加手机用户目录关于增加手机用户目录 此次变更只针对手机用户可见的文件(手机用户目录及 SD 卡上的文件),不包括系 统默认的多媒体文件(如/system/media 下的文件)。 此次修改只是增加功能,不修改原有功能,因此不会对 Google 原代码与方案有影 响。2) 关于增加非多媒体文件信息表关于增加非多媒体文件信息表“file_store”Google 发布的原始代码中,关于多媒体文件扫描部分,在扫描的时候,如果文件为 当前平台支持的图片、音乐、视频之外的其他文件,不做任何处理,而这些没有被处理的 文件,正是我们将

9、要处理的文件。因此我们加了一个分支,将这些被当前平台认为是非多 媒体文件的信息也加入数据库,存储到我们新增加的表“file_store”。3. 设计设计1) 关于增加手机用户目录关于增加手机用户目录 增加手机用户目录“/data/HWUserData”,并增加多媒体数据库 external-hw.db 用来存储该目录下的所有可见文件信息; SD 卡可用时,将“/sdcard”及“/data/HWUserData”上所有文件信息存储在数据库 external-*.db 对应的表中; SD 卡状态为 unmounted 时,将“/data/HWUserData”的所有文件信息存储在数据库 exte

10、rnal-hw.db 对应的表中。MediaProvider 会根据当前 SD 卡是否可用,选择操作数据库 external-*.db 或 external-hw.db。2) 关于增加非多媒体文件信息表关于增加非多媒体文件信息表“file_store” 在MediaProvider数据库external-hw.db、external-*.db中分别建表file_store, 用来存储手机内部用户目录及sdcard中的非多媒体文件信息; 扫描文件的方式及流程与G1相同; 在G1的扫描流程中,扫描到非多媒体文件时,将该文件信息存储到表file_store中;在FileManager中进行Cut/P

11、aste、Copy/Paste、Delete、New foler等操作时,相应 地更新数据库。4效果效果1) 关于增加手机用户目录关于增加手机用户目录 将我们新增加的手机内部用户目录的所有多媒体文件信息成功加入多媒体数据库,就 版算没有 SD 卡,多媒体各个模块仍然可以正常使用。2) 关于增加非多媒体文件信息表关于增加非多媒体文件信息表“file_store” 在文件目录层次较深、文件数目巨大时,效果较为明显,搜索速度成倍增加,据我们 的不完全统计,较快时搜索速度甚至是原来的10倍。5. 影响范围影响范围1) 关于增加手机用户目录关于增加手机用户目录 需要在多媒体数据库对图片及图片缩略图信息进

12、行操作的模块; 需要在多媒体数据库对视频及视频缩略图信息进行操作的模块; 需要在多媒体数据库对音乐及音乐封面缩略图信息进行操作的模块;2) 关于增加非多媒体文件信息表关于增加非多媒体文件信息表“file_store” 需要操作多媒体数据库中新增表 file_store 的模块; 开机及插拨卡时更新多媒体数据库时间延长。6. 代码修改代码修改1) 数据库方面 (1) frameworksbasecorejavaandroidproviderMediaStore.java 需求:增加操作表 file_store 时的相关常量及方法定义,class: FileRecord (2) packagesp

13、rovidersMediaProvidersrccomandroidprovidersmediaMediaProvider.java 需求:增加数据库external-hw.db及表“file_store”及相应的增删改查处理。 (3) externalsqliteandroidsqlite3_android.cpp需求:根据多媒体数据库的文件删除机制,打开只删除sdcard上文件的限制,增加对手 机上文件的删除。2) 开机扫描方面 (1) packagesprovidersMediaProvidersrccomandroidprovidersmediaMediaScannerReceiver

14、.java 需求:增加对指定多个目录的扫描。 (2) packagesprovidersMediaProvidersrccomandroidprovidersmediaMediaScannerService.java 需求:增加扫描路径:手机内部用户目录以及增加对指定多个目录扫描的处理。 (3) frameworksbasemediajavaandroidmediaMediaScanner.java 需求:扫描时增加对非多媒体文件的处理 (4) frameworksbasemediajavaandroidmediaMediaFile.java 需求:增加非多媒体文件类型(mimetype) (

15、6) externalopencoreandroidmediascanner.cpp 需求: 扫描时增加对非多媒体文件的处理 (7) frameworksbaseincludemediamediascanner.h 需求:对调用 java 方法的声明 (8) frameworksbasemediajniandroid_media_MediaScanner.cpp 需求:对调用 java 方法的声明及实现7. 典型修改点典型修改点1) 增加了拨卡扫描: 因为 SD 卡存在时,HWUserData 和 SD 卡上的文件信息全部存在在 external-*.db, 因此在拨掉 SD 卡后,需要更新

16、external-hw.db。2) 根据 SD 卡状态切换 external 数据库: A: 我们的手机极不稳定,很多进程重复 died,然后又重新启动,因此导致变量值丢失, 为了保证正确获取当前应该使用的 external 数据库,在 attach 方法里必须判断 SD 卡状态。 B: 在 MediaScannerService 开始扫描,打开数据库前,也要正确获取 SD 卡状态以便 打开数据库时能够正确获取应该使用的数据库。3) 增加了对指定多个目录的扫描: 根据 File Manager 的需求,增加了对多个文件夹的扫描,仍使用 MEDIA_SCAN_FILE, 但支持传递参数为字符串数据(多个文件夹) ,但 uri

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号