Android 图库更新同步问题总结(包含增加图片、删除图片)

版权声明:本文为博主原创文章,未经博主允许不得转载。原文链接http://blog.csdn.net/adayabetter?viewmode=contents https://blog.csdn.net/adayabetter/article/details/80093991

Android 图库更新同步问题总结(包含增加图片、删除图片)

Android中有时需要更新图库来同步图片等信息。
比如:1. 下载图片成功,并且保存到本地了,此时去图库查看,发现依然没有更新出来;
2. 清空应用内的图片,递归删除某目录下的图片,图库没有及时刷新。

增加图片,更新图库关键代码

在需要更新图库的地方(比如下载图片成功的回调中)调用

// update gallery
new SingleMediaScanner(McpttApp.getGlobalContext(), Define.SAVE_PATH + fileName, new ScanListener() {   
        @Override
        public void onScanFinish() {
            Log.d(Define.TAG, "--onScanFinish");
            }
        });

SingleMediaScanner.java的实现如下:

package com.mcptt.common;

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 {  

public interface ScanListener{  
    public void onScanFinish();  
}  

private MediaScannerConnection mMs;  
//private File mFile;  
private String mFilePath;
private ScanListener listener;  
private final String TAG = "SingleMediaScanner";

public SingleMediaScanner(Context context, File f,ScanListener l) {  
    listener = l;  
    mFilePath = f.getAbsolutePath();  
    mMs = new MediaScannerConnection(context, this);  
    mMs.connect();  
}  

public SingleMediaScanner(Context context, String filePath,ScanListener l) {  
    listener = l;  
    mFilePath = filePath;  
    mMs = new MediaScannerConnection(context, this);  
    mMs.connect();  
}

@Override  
public void onMediaScannerConnected() {  
    Log.d(TAG, "--onMediaScannerConnected--file:"+mFilePath);
    mMs.scanFile(mFilePath, null);  
}  

@Override  
public void onScanCompleted(String path, Uri uri) {  
    Log.d(TAG, "--onScanCompleted--path:"+path+"--uri:"+uri);
    mMs.disconnect();  
    listener.onScanFinish();  
}  

}  

删除图片,更新图库关键代码

应用场景:在应用的设置中,有清除缓存功能,该功能主要是清除应用目录(如: /storage/sdcard0/eChat)下的图片和视频文件。

删除图片的代码如下:

private boolean deleteImage(String imgPath) {
    ContentResolver resolver = this.getContentResolver();
    Cursor cursor = MediaStore.Images.Media.query(resolver, MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        new String[] { MediaStore.Images.Media._ID }, MediaStore.Images.Media.DATA + "=?",
        new String[] { imgPath }, null);
    boolean result = false;
    if (null != cursor && cursor.moveToFirst()) {
        long id = cursor.getLong(0);
        Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        Uri uri = ContentUris.withAppendedId(contentUri, id);
        Log.d(TAG, "--deleteImage--uri:"+uri);
        int count = this.getContentResolver().delete(uri, null, null);
        result = count == 1;
    } else {
        File file = new File(imgPath);
        result = file.delete();
    }
        Log.d(TAG, "--deleteImage--imgPath:"+imgPath+"--result:"+result);
        return result;
    } 

猜你喜欢

转载自blog.csdn.net/adayabetter/article/details/80093991