Android 更新/删除MediaStore文件的方法 看这一篇你就都懂了!

时间:2025-01-28 07:01:27

       开发中处理本地多媒体文件时经常会用到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;
        }

    }