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

本文介绍了Android中更新图库的方法,包括新增图片后的同步及删除图片后的刷新操作。通过具体的代码示例,展示了如何使用MediaScannerConnection进行扫描,确保图库能够实时反映应用内图片的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值