解决 Android 写入图片后 系统图库中看不到

将一个图片通过写入外部存储后,打开系统图库找不到该图片,因为系统图库属于多媒体库,我们保存图片后未通知多媒体扫描,所以看不到保存的图片了

4.4以下可以通过发送广播通知多媒体库自动扫描,filePath是图片保存的完整路径


sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + filePath)));



4.4 Android把系统广播的权限回收了,只有系统应用才可以发送系统广播 所以4.4以上可以通过 MediaScannerConnection,都会通过这种方式告诉MediaProvider同步媒体数据库。

封装 自定义MediaScanner

public class MediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {

/**
* 扫描对象
*/
private MediaScannerConnection mediaScanConn = null;

public MediaScanner(Context context) {
//实例化
mediaScanConn = new MediaScannerConnection(context, this);
}

/**文件路径集合**/
private String[] filePaths;
/**文件MimeType集合**/
private String[] mimeTypes;

/**
* 扫描文件
* @author YOLANDA
* @param mimeTypes
*/
public void scanFiles(String[] filePaths, String[] mimeTypes) {
this.filePaths = filePaths;
this.mimeTypes = mimeTypes;
mediaScanConn.connect();//连接扫描服务
}

/**
* @author YOLANDA
*/
@Override
public void onMediaScannerConnected() {
for (int i = 0; i < filePaths.length; i++) {
mediaScanConn.scanFile(filePaths[i], mimeTypes[i]);//服务回调执行扫描
}
filePaths = null;
mimeTypes = null;
}

private int scanTimes = 0;

/**
* 扫描一个文件完成
* @author YOLANDA
* @param path
* @param uri
*/
@Override
public void onScanCompleted(String path, Uri uri) {
scanTimes ++;
if(scanTimes == filePaths.length) {//如果扫描完了全部文件
mediaScanConn.disconnect();//断开扫描服务
scanTimes = 0;//复位计数
}
}
}


当图片保存好后,通过MediaScanner更新媒体库

MediaScanner mediaScanner = new MediaScanner(this);
String[] filePaths = new String[]{filePath};
String[] mimeTypes = new String[]{MimeTypeMap.getSingleton().getMimeTypeFromExtension("png")};
mediaScanner.scanFiles(filePaths, mimeTypes);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值