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;
}