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

       开发中处理本地多媒体文件时经常会用到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”是有效的。

  MediaScannerConnection.scanFile(
	mContext,
	new String[]{ "所需文件的绝对路径" },
	new String[]{  "video/mp4","audio/mp3" },
	new MediaScannerConnection.MediaScannerConnectionClient()
	{
		public void onMediaScannerConnected()
		{
		}
		public void onScanCompleted(String path, Uri uri)
		{
		}
	});

 

二、彻底删除MediaStore文件

当我们需要彻底删除MediaStore中的文件时,不仅要删除件文件索引还要删除源文件

删除工具类:

private void  deleteMedieFile(File file){
        if (file.isFile()) {
            String filePath = file.getPath();
            if(filePath.endsWith(".mp4")){
                int res = mContext.getContentResolver().delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                        MediaStore.Audio.Media.DATA + "= \"" + filePath+"\"",
                        null);
                if (res>0){
                    file.delete();
                }else{
                    Log.e(TAG, "删除文件失败");
                }
            }else if (filePath.endsWith(".jpg")||filePath.endsWith(".png")||filePath.endsWith(".bmp")){
                int res = mContext.getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        MediaStore.Audio.Media.DATA + "= \"" + filePath+"\"",
                        null);
                if (res>0){
                    file.delete();
                }else{
                    Log.e(TAG, "删除文件失败");
                }
            }else{
                file.delete();
            }
            //删除多媒体数据库中的数据
            return;
        }

    }

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值