相机意图/活动 - 避免保存到画廊

Posted

技术标签:

【中文标题】相机意图/活动 - 避免保存到画廊【英文标题】:Camera intent/Activity - avoid saving to gallery 【发布时间】:2011-07-10 10:51:38 【问题描述】:

我正在使用 相机活动 来拍摄照片。我用 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 );
...

谢谢

【问题讨论】:

+1 表示好问题。我一直想知道为什么我所有使用相机的应用程序都将图片保存在图库中。 我得出的结论是,您无法真正预测相机活动的真正作用。这部分取决于定制的 android 版本的程度(因此是定制的相机活动等)。解决这个问题的唯一方法是编写自己的相机活动。对我来说,这是解决所有怪癖而不使用任何技巧的最简单方法。 嗨,Audrius,我同意你的看法 - 这取决于设备 - 在某些手机上,它还会将图像保存到图库(例如 LG-P500),而在某些手机上则不会(例如三星 Nexus S)。相机活动的许多方面都非常糟糕,它不允许指定参数,例如最小/最大图像质量,这完全取决于用户,它不能返回缓冲区中的 JPEG,例如进一步处理等。使用起来很简单,但不如它可以。在下一个项目中,我将自己处理相机......再见 有没有办法找出(可靠)重复/不需要的保存图像的 url? (我的意思是保存在默认相机文件夹中的那个根本不应该保存)?因为如果是这样,作为一种解决方法,可以删除那个... @matteo 看看这个:***.com/questions/6390163/… 不漂亮,但我试过了,它有点工作。不过,我没有参考公认的答案 - 我尝试了 Emil 的方法。 【参考方案1】:

只需替换您的代码

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

使用以下代码

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

getExternalFilesDir() 的说明: 返回主外部文件系统上目录的绝对路径(即Environment.getExternalStorageDirectory()) 上的某个位置,应用程序可以在其中放置它拥有的持久文件。这些文件是应用程序的内部文件,通常不作为媒体对用户可见。

【讨论】:

【参考方案2】:

如何使用非图像扩展名保存图像?像 michael.photo 之类的东西,而不是 michael.jpg/png 等。这样,Gallery 应用程序不会接受它们,我见过很多这样的应用程序 keepsafe 例如这样做。

【讨论】:

【参考方案3】:

我认为您无法避免这种情况。图库应用程序会在您的 SD 卡中查找图像并自动显示它们。

【讨论】:

这不是重点。关键是图像实际上保存了两次:一次在作为 EXTRA_OUTPUT 提供的位置加上一次在默认位置。这就是 OP 想要避免的

以上是关于相机意图/活动 - 避免保存到画廊的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像从相机保存到 iPhone 画廊中的特定文件夹?

来自画廊/相机意图的图片方向[重复]

将相机或画廊中的图像保存在 phonegap 的画布中,并在旋转和裁剪后保存

用相机意图拍摄照片并将其保存到文件中

从活动中调用相机,捕获图像并上传到服务器

相机意图应用程序崩溃