Android中,SD卡上的媒体文件(图片、视频)的改变与通知

本文探讨了Android中SD卡媒体文件(如图片、视频)更改后的通知机制。当媒体文件通过蓝牙接收、下载或被删除时,MediaProvider如何得知变化并更新其数据库。MediaScannerConnection和MediaScannerService是两种主要的通知方式,用于确保MediaProvider能同步SD卡上的最新媒体信息。未使用这两种方式可能导致Gallery无法显示最新内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MediaProvider相当于一个数据中心,SD卡上所有的数据在这里都有记录,而Gallery的什用就是展示和操作这个数据中心,每次用户启动Gallery时,Gallery只是读取MediaProvider里面的记录并显示用户。如果用户在Gallery里删除一个媒体时,Gallery通过调用MediaProvider开放的接口来实现。

MediaProvider和Gallery的大致关系就是这样的了。我现在碰到的问题要解决的话,必须要搞清楚一件事才能继续往下走:

因为Gallery启动时是不会给MediaProvider发送命令让它扫描全盘的。那么,当SD卡上的数据有更新时(比如通过蓝牙接收一个媒体、从网上下载一个媒体、删除一个媒体等操作),MediaProvider如何知道这些变化然后更新自己的数据库的呢?

在这里不考虑用户通过PC上的USB传输到SD卡上的问题。因为SD卡重新挂载时,MediaProvider会自动扫描SD卡上的媒体来更新媒体数据库的。

 

那么只有一个答案了,谁更新了SD卡上的媒体,谁通知MediaProvider把更新了的媒体同步到MediaProvider的媒体数据库中。有两种方式,恰好蓝牙和下载器分别使用了这两种方式,这里就以它们两个程序来说明一下。

 

1、MediaScannerConnection,蓝牙传输文件时就是用的这种方式,每当接收到新的媒体文件,都会通过这种方式告诉MediaProvider同步媒体数据库。

建立连接

mConnection = new MediaScannerConnection(mContext, this);

因为建立连接是一个异步过程,所以,在建立连接时需要加入一个监听器。这样,连接建立后就可以得到通知,并进行下一步。

 

更新媒体数据库

mConnection.scanFile(mInfo.mFilename, mInfo.mMimetype);

这也是一个异步过程,更新完毕后,监听器中得到通知,并断开连接。

 

断开连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值