Android-MediaScanner&MediaProvider学习一

前言:

  安卓手机中有一个google原生的对媒体文件的操作-MediaProvider。这个服务是通过apk的方式运行的,开机自启动。这个服务的主要功能是维护一个媒体文件的数据库。但有新的媒体文件生成时将其插入数据库,当有媒体文件被删除时,从数据库删除相应的记录,当访问图库等app时从数据库读取响应的数据……

  ps: MediaProvider是原生的服务,三方app可以直接调用进行插入、删除、查询等功能,也可以自己编写相应的方法去实现此功能。

 

维护的数据库:

private static final String INTERNAL_DATABASE_NAME = "internal.db"; // 这个是系统分区的文件信息,用户拿不到

private static final String EXTERNAL_DATABASE_NAME = "external.db"; // 这个是用户能看到的存储区的文件信息,即包含了手机内置存储,还包含了SD卡,用户可以拿到

数据库在手机中的目录为: /data/data/com.android.providers.media/databases

root后的机器可以直接把数据库pull出来用sqlitebrowser看里面的内容。

Android-MediaScanner&MediaProvider学习一_第1张图片

Android-MediaScanner&MediaProvider学习一_第2张图片

从上表可以看到数据库中存放的数据,例如图片的存放路径、大小等信息,视频的mine-type、时长、分辨率等信息。

 

MediaProvider.apk了解:

具体代码的路径: /packages/providers/MediaProvider/

主要实现的服务如下:

MediaScannerReceiver: 继承了BroadcastReceiver类,主要响应APP发送的广播命令,并开启MediaScannerService。

MediaScannerService: 继承了Service,主要是处理app发送的请求,对相应目录进行扫描,并获取媒体文件的metadata,最后将数据写入数据库,或者从数据库删除相应记录。

MediaProvider: 继承了ContentProvider,主要是负责对数据库的查询等操作。

 

这篇文章先对MediaScanner&MediaProvider有一个初步认识,想要继续了解具体实现的同学请看博客: https://blog.csdn.net/cheriyou_/article/details/90772051

你可能感兴趣的:(安卓基础)