开发中处理本地多媒体文件时经常会用到MediaStore,当程序从网络下载或其他途径生成一个新媒体文件到终端后,android手机系统的MediaScanner服务并不会自动扫描刚刚生成的文件,需要程序主动去扫描这些新添加的媒体文件信息到MediaStore数据库中。MediaStore,本质上是 Android 维护的一个文件系统的数据库,它记录了当前磁盘上所有的文件索引,我们可以通过它,快速的查找当前系统的文件。
一、更新MeidaStore
如何更新MediaStore呢?
通过分析源码得知:
①当系统启动完毕 会扫描一次(更新MediaStore数据库)
②当 ACTION_MEDIA_MOUNTED 或者 ACTION_MEDIA_SCANNER_SCAN_FILE 也会扫描(更新MediaStore数据库)
刷新系统 MediaStore通常有如下几种方式:
- 通过操作 MediaStore 类。
- 发送广播更新 MediaStore。
- 通过操作 MediaScannerConnection 类。
通过研究实验,发 送广播更新 和 操作MediaStore,对于许多android机型是无效的
我们可以通过操作 MediaScannerConnection 类更新MediaStore,可以用以下代码请求特定文件的重新扫描。(稳定高效)
注意:传递的MIME类型很重要。如果使用“*/*”,对MP3 ID3标记所做的更改不能在SQLite中正确刷新,但是使用“音频/mp3”是有效的。
(
mContext,
new String[]{ "所需文件的绝对路径" },
new String[]{ "video/mp4","audio/mp3" },
new ()
{
public void onMediaScannerConnected()
{
}
public void onScanCompleted(String path, Uri uri)
{
}
});
二、彻底删除MediaStore文件
当我们需要彻底删除MediaStore中的文件时,不仅要删除件文件索引还要删除源文件
删除工具类:
private void deleteMedieFile(File file){
if (()) {
String filePath = ();
if((".mp4")){
int res = ().delete(.EXTERNAL_CONTENT_URI,
+ "= \"" + filePath+"\"",
null);
if (res>0){
();
}else{
(TAG, "删除文件失败");
}
}else if ((".jpg")||(".png")||(".bmp")){
int res = ().delete(.EXTERNAL_CONTENT_URI,
+ "= \"" + filePath+"\"",
null);
if (res>0){
();
}else{
(TAG, "删除文件失败");
}
}else{
();
}
//删除多媒体数据库中的数据
return;
}
}