2011-03-07 58 views
12

我正在使用摄像机活动捕捉图片。我用MediaStore.EXTRA_OUTPUT额外的参数调用它。图像被正确保存到提供的路径,并将其保存到图库文件夹中,以便我可以在“图库”应用程序中查看图像 - 我可以避免这种情况吗?摄像机意图/活动 - 避免保存到画廊

... 
File file = new File(Environment.getExternalStorageDirectory(), "Test.jpg"); 
iImageOutputUri = Uri.fromFile(file); 

// Start camera intent to capture image 
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, iImageOutputUri); 
startActivityForResult(intent, CAPTURE_IMAGE); 
... 

感谢

+0

+1为好问题。我一直在想,为什么我所有使用相机的应用程序都将图片保存在图库中。 – Chris 2011-03-07 15:58:12

+3

我得出的结论是,你无法真正预测相机活动的确会发生什么。它部分取决于如何定制android版本(因此是自定义相机活动等)。解决这个问题的唯一方法是编写自己的相机活动。对我来说,这是解决所有怪癖并且不使用任何黑客的最简单方法。 – Audrius 2011-03-07 17:11:19

+3

嗨Audrius,我同意你 - 它取决于设备 - 在一些手机上,它也将图像保存到图库(例如LG-P500),有些则不是(例如三星Nexus S)。摄像机活动的许多方面都很糟糕,它不允许指定参数,如最小/最大图像质量,这完全取决于用户,它不能将缓冲区中的JPEG返回,例如,进一步处理等等。使用起来非常简单,但不如它可以。在下一个项目中,我会做我自己的相机处理...再见 – STeN 2011-03-08 04:57:46

回答

-3

我不相信你能避免这种情况。图库应用程序通过SD卡查找图像并自动显示它们。

+2

这不是重点。重点是图像实际上保存了两次:一次在EXTRA_OUTPUT提供的位置加上一次默认位置。这是OP想要避免的 – matteo 2011-12-28 15:23:44

0

如何保存非图像扩展名的图像?像michael.photo而不是michael.jpg/png等。像这样的方式画廊应用程序不会带他们进来,我见过很多这样的应用程序保持例如这样做。

2

只需用下面的代码

File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "Test.jpg"); 

getExternalFilesDir()的说明替换您的代码

File file = new File(Environment.getExternalStorageDirectory(), "Test.jpg"); 

返回位于主外部文件系统的目录的绝对路径(即在Environment.getExternalStorageDirectory())的某个地方应用ion可以放置它拥有的持久性文件。这些文件是应用程序的内部文件,对于用户而言通常不可见为媒体。