Android相机拍照后在系统gallery中看不到的解决办法

首先要感谢一下此文作者,这篇文章对我的启发很大。

http://blog.csdn.net/xiaanming/article/details/8990627 (解决Android拍照保存在系统相册不显示的问题

刚开始的时候,我按照上文的办法试了一下,发现在android 4.0.3 AVD模拟器中是可以在系统相册中查看照片的,但是我的android 2.2系统手机却不可以。经过一番努力,找到了以下几个关键点。希望可以帮助有同样困难的朋友。

首先,我们需要将拍摄的照片保存在一个File中,File的地址就是最终存储在SDcard上的位置

String fileName = new String(System.currentTimeMillis() + "HYN"); //设置要保存的文件名
File file = new File(Environment.getExternalStorageDirectory() + "/picture/", fileName + ".jpg"); //新建File,我将创建地址设置在sdcaid中的picture文件夹下
FileOutputStream fileOS = new FileOutputStream(file); //新建FileOutputStream,将输出目标设置成file文件的位置,表示输出给file
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOS) //将bitmap设置为输出源,并设置输出格式和品质
fileOS.flush(); //正式输出文件
fileOS.close(); //输出文件完成后要关闭输出流

至此,照片已经存入了SDcard,地址就是file中指定的地址,但是系统的图库(或称 gallery)还看不到图片,我们需要发一条通知。代码如下。

Intent intent = new Intent(); //新建一个Intent,用来发广播
Uri uri = Uri.fromFile(file); //新建一个Uri,使用file的地址
intent.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); //设置intent的action,这条action表示要将数据添加进系统的媒体资源库
/*
gallery中显示照片全是在这个资源库中找到的,
换句话说,我们需要存进去正确的文件地址才可以在gallery中显示出来,
否则即使文件存在在SDcard上gallery也不知道它。
*/
intent.setData(uri); //指定存入资源库的数据,就是我们照片文件的地址
sendBroadcast(intent); //发布广播。使用MainActivity.this.sendBroadcast(intent);也可以

这样看来,让图库看到文件还是很容易的。不过需要注意的就是在uri中添加文件地址的时候一定不要图省事填一个bitmap的地址,一定要使用file的地址,也就是存在哪里就填哪里的地址。本文开头提到的文章中作者提出了一个下面这个函数,按官网说法是用来插入bitmap到媒体库中并返回新建文件的地址,总之我试过之后,结果返回的不是实际文件存在的地址,也就是说这个函数的返回值对我们来说也是没用的。实际上我试验发现这句话不写并不影响拍照和照片的显示。

MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "", "");

本文到此结束,希望可以给大家一些启发。刚学编程,有说的不对的地方欢迎大家来喷。呵呵

你可能感兴趣的:(Android相机拍照后在系统gallery中看不到的解决办法)