在开发中,我打开摄像头保存图片到SD卡/本地中,但是打开相册没有看到所保存的图片
我在网上找了很多解决方案
目前可以解决的,比较简单的方案是:
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri uri = Uri.fromFile(temp_file); intent.setData(uri); context.sendBroadcast(intent);//这个广播的目的就是更新图库,发了这个广播进入相册就可以找到你保存的图片了!,记得要传你更新的file哦
还有一个解决方案:
//当图片保存好后,通过MediaScanner更新媒体库 MediaScanner mediaScanner = new MediaScanner(CheckSignActivity.this); String[] filePaths = new String[]{"所保存图片的文件路径"}; String[] mimeTypes = new String[]{MimeTypeMap.getSingleton().getMimeTypeFromExtension("png")}; mediaScanner.scanFiles(filePaths, mimeTypes);
其中MediaScanner类代码如下:
import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
/**
*
* Android把系统广播的权限回收了,只有系统应用才可以发送系统广播
* 所以4.4以上可以通过 MediaScannerConnection,
* 都会通过这种方式告诉MediaProvider同步媒体数据库
*
* 封装 自定义MediaScanner
*
* Created by li on 2017/4/18.
*/
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;
/**
* 扫描文件
*
* @param filePaths
* @param mimeTypes
*/
public void scanFiles(String[] filePaths, String[] mimeTypes) {
this.filePaths = filePaths;
this.mimeTypes = mimeTypes;
mediaScanConn.connect();//连接扫描服务
}
/**
*
*/
@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;//复位计数
}
}
}
这两个我目前试的是可行的,别的方案暂时还没有尝试,如果有的话可以发出来,共同学习一下,希望能帮助到各位