参考:http://blog.csdn.net/u011494050/article/details/38523637
最近在写关于相机的应用,然而将拍摄后的图片保存后却不能在系统图库中看到,每次都要到文件管理下的对应保存目录才能看见,或者要重启手机才能在图库下看见。用户体验十分不好,故找到解决方法如下:
自己指定图片保存路径:
public File savePicToSDCard(Bitmap bitmap) {
File picFile = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String fileName = sdf.format(new Date()) + ".jpg";
boolean isSDExist = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); //判断SD卡是否存在
if (isSDExist) {
String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
File saveDir = new File(sdPath,"myCamera");
if (!saveDir.exists()) {
saveDir.mkdir();
}
picFile = new File(saveDir, fileName);
try {
FileOutputStream out = new FileOutputStream(picFile); //文件输出流
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return picFile;
}
获得保存路径:
File saveFile = savePicToSDCard(bitmap);//将图片保存到SD卡中
使图片在图库中显示:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(saveFile)));
关键的代码就这一句,仅仅扫描指定路径的图片将其放入图库。
还有其他的方法可以将已经保存的图片在图库中显示,但是这种方法是将已经保存在别处的图片再次保存到系统图库下,实际上是保存了两遍。
代码如下:
String fileUrl = MediaStore.Images.Media.insertImage(getContentResolver(),saveFile.getPath(),"cameraPhoto", "Camera Pic Sample App Took");
如果不显示:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://"+fileUrl)));
或者全盘扫描:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
这是整个SD卡都会被扫描,如果东西很多会扫描很久。