你的位置:首页 > 操作系统

[操作系统][Android] 针对生成的图片文件在系统Gallery不显示的处理

  之前遇到过一个问题,就是发现我在程序中生成一个新的 Bitmap 之后,当我打开系统的 Gallery 查看时,并没有看到新生成的图像。然而打开文件浏览器,找到保存 Bitmap 所在的文件夹下,还能看到程序生成的 Bitmap 文件。也就是说,文件其实存在,但 Gallery 似乎并没有刷新。之后,又一个新的行为证实了我的观点,即,每次重启设备之后, Gallery 中就会显示新生成的 Bitmap 了。也就是说,重启设备之后,系统对某个保存有图片信息的文件进行了重新读写(当时得出的是这么个结论,具体原理后面会专门写博客讨论)。

  好了,原理能猜出个大概,那么就猜一猜方法:也许可以通知系统来对保存有图片信息的那个文件进行刷新,做一次对文件夹的扫描。但到底有没有这个方法呢?带着疑问,我在网上找了找资料,发现原理的确是这么回事,方法也是有的。

  本文地址:http://www.cnblogs.com/rossoneri/p/4239152.html

  现在有两个方法可以解决这个问题:

 

Solution 1: 发送广播,通知系统刷新。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

  不过用这个方法需要给程序添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.RESTART_PACKAGES" />

  这个方法我没有测试,但看介绍应该是可以的。

 

Solution 2: 使用 MediaScannerConnection :

  首先对要使用该方法的类继承 MediaScannerConnectionClient :

public class YourView implements MediaScannerConnectionClient {}

  继承该类需要重写两个方法:

@Overridepublic void onMediaScannerConnected() {  // TODO Auto-generated method stub  try {    msc.scanFile(bitmapPath, "image/jpg");  } catch (Exception e) {    e.printStackTrace();  [email protected] void onScanCompleted(String path, Uri uri) {  // TODO Auto-generated method stub  msc.disconnect();}

  方法看其名称就能猜到,前者是连接上 MediaScanner 后,进行查找文件。 bitmapPath 是文件的绝对路径,"image/jpg" 是文件格式, jpg 可改为 png 甚至 * 。后者方法是查找结束后断开连接。

  最后,创建 MediaScannerConnection 对象,在生成图片后调用其方法:

MediaScannerConnection msc;.....if (msc != null) {  msc.disconnect();}msc = new MediaScannerConnection(mActivity, thisClass.this);msc.connect();

  这样,下次再生成新的图片后,就可以在 Gallery 中看到新生成的图片了!

 

  恩,问题解决了。然后我又发现了一个问题:如果我在程序中删除了某个图片,结果发现 Gallery 中还有这个图片的路径,能看到有这个图片,但打开图片是一片灰色。说简单点,就是我用代码删除图片文件了,系统的保存信息还是有这个文件的路径存在,只有重启才会删掉这些无效路径。好了,问题来了,怎么改?

  能不能像之前的步骤再来一次?前面的步骤好像是刷新了系统的某个配置文件,再做一次也许会行。尝试之后发现(第一种方法没试。。),然而并不行。

  既然这样不行,那也许是我对系统的某些原理还没有搞懂,应该还有其他的方法。经过一番探索,我还是找到了解决方法,并且对 Android 系统扫描存储这些信息的原理有了进一步的了解。下一篇文章,就简单讨论讨论这个原理和解决办法。今天先到这里。

 

参考资料:

[Android实例] 把bitmap保存后无法在图库看到,但文件是存在的

Image, saved to sdcard, doesn't appear in Android's Gallery app

 


海南跟团旅游报价多少海南旅游线路大全海南旅游报价价格海南旅游团购优惠深圳去海南旅游报价悉尼是哪个国家 华南植物园门票_广州华南植物园门票价格_华南植物园门票多少钱 品味韩国古文化——景福宫旅游攻略 东方之美 外国人眼中的十大中国名胜 松潘古城 香格里拉 江西今年接待人数瞄准1.3亿 东坡肘子 去马尔代夫旅游价格多少钱,报价在10000左右的岛屿有哪些? 不会游泳,可以去马尔代夫浮潜吗? 去泰国的普吉岛自助游的注意事项? 去马尔代夫旅游有哪些注意事项? 2015深圳海洋世界门票多少钱?深圳小梅沙小孩子要门票吗?_海洋世界旅游攻略_海洋世界旅游景点 陕西最美赏秋地推荐牛背梁_华山旅游攻略_华山旅游景点 深圳海洋世界官网,深圳小梅沙海洋世界官方网站。_海洋世界旅游攻略_海洋世界旅游景点 深圳海洋世界怎么去?深圳小梅沙海洋世界坐几路车直达?_海洋世界旅游攻略_海洋世界旅游景点 MURB1620CTTRL Datasheet MURB1620CTTRL Datasheet MURB1620CTTRR Datasheet MURB1620CTTRR Datasheet MURB1620CT Datasheet MURB1620CT Datasheet 肇庆出发去布基纳法索旅游 肇庆出发去布基纳法索旅游 肇庆出发去布基纳法索旅游 肇庆出发去布隆迪旅游 肇庆出发去布隆迪旅游 肇庆出发去布隆迪旅游 肇庆出发去长沙旅游 肇庆出发去长沙旅游 肇庆出发去长沙旅游