刷新android中的媒体库
刷新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为你生成的文件。在文件生成之后调用即可。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类