刷新android中的媒体库
发布时间:2016-12-15 来源:查字典编辑
摘要:1.问题概述使用我们自己写的程序生成一张图像或者一段视频,存放在SD卡的某个位置下,之后打开系统自带媒体库(图库)无法找到对于的图像和视频。...
1. 问题概述
使用我们自己写的程序生成一张图像或者一段视频,存放在SD卡的某个位置下,之后打开系统自带媒体库(图库)无法找到对于的图像和视频。连上电脑打开相应文件夹也找不到相应的文件?但是当手机重启之后,不管是在媒体库里找还是连上电脑搜索都可以找到。这其中发生了啥?
2. 问题原因Android 内部维护了很多数据库,比如媒体数据库、联系人数据库等等。你在生成视频后并没有将视频的位置添加到这个数据库中。所以找不到呗。但是系统在每次重启后会自动更新一遍数据库,所以重启就可以找到了。
3. 如何解决android可以手动更新媒体数据库,通常的做法都是发送广播
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, dirUri)); //刷新sd卡 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,fileUri)); //刷新单个文件
目前在android API 23下直接刷新SD卡是会报错的,被系统禁止了,我屡次使用刷新单个文件都不怎么见效果。网上有个人说采用广播的方式刷新文件是可以的,一般没效果都是因为文件路径没有写对。这个供各位参考。
我实现媒体库数据的自动更新采用以下代码
/* * Copyright (c) 2016. All rights reserved * Created by GH_HOME on 16-12-12 下午3:04 * Last modified 16-12-12 下午2:41 * */ package com.test; import java.io.File; import android.content.Context; import android.media.MediaScannerConnection; import android.media.MediaScannerConnection.MediaScannerConnectionClient; import android.net.Uri; import android.util.Log; public class SingleMediaScanner implements MediaScannerConnectionClient { private MediaScannerConnection mMs; private File mFile; public SingleMediaScanner(Context context, File f) { mFile = f; mMs = new MediaScannerConnection(context, this); mMs.connect(); } @Override public void onMediaScannerConnected() { mMs.scanFile(mFile.getAbsolutePath(), null); } @Override public void onScanCompleted(String path, Uri uri) { mMs.disconnect(); Log.i("TAG", "Finished scanning " + path); } }
调用方式为
new SingleMediaScanner(this, mOutputFile);
其中this为你当前的activity,mOutputFile为你生成的文件。在文件生成之后调用即可。