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

13

我正在使用相机Activity来拍照。我使用带有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 );
...

谢谢


这是一个好问题。我一直在想为什么我所有使用相机的应用程序也会将照片保存在图库中。 - Chris
3
我得出一个结论,即你不能真正预测相机活动的实际作用。 它部分取决于Android版本的定制程度(因此,自定义相机活动等)。 解决这个问题的唯一方法是编写自己的相机活动。 对我而言,这是绕过所有怪癖且不使用任何黑客的最简单方法。 - Audrius
3
嗨,Audrius,我同意你的看法-这取决于设备-在某些手机上它也会将图像保存到相册中(例如LG-P500),而在其他手机上则不会(例如三星Nexus S)。相机活动的许多方面都相当糟糕,它不允许指定参数,例如最小/最大图像质量,这完全取决于用户,它不能返回缓冲区中的JPEG,以便进行进一步处理等等。它非常简单易用,但并不像它本可以那样好。在下一个项目中,我将自己处理相机...再见。 - STeN
有没有一种可靠的方法可以找到重复/不需要保存的图像的URL?(我的意思是保存在默认相机文件夹中不应该保存的那个)。因为如果有的话,作为解决方法,可以删除那个图像... - matteo
2
@matteo 看看这个:https://dev59.com/8Gw15IYBdhLWcg3wzO1_ 不是很好看,但我试过了,有点用。不过我不是指接受的答案 - 我试了Emil的方法。 - AgentKnopf
3个回答

2
只需要替换你的代码。
File file = new File(Environment.getExternalStorageDirectory(), "Test.jpg" );

使用以下代码:
File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "Test.jpg");

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


0

将您的图像保存为非图像扩展名,这个想法怎么样呢?例如使用michael.photo而不是michael.jpg/png等扩展名。这样画廊应用程序就无法读取它们了,我见过很多类似的应用程序,比如KeepSafe。


-3

我不相信你可以避免这个。相册应用程序会在您的SD卡中搜索图片并自动显示它们。


2
这不是重点。重点是图像实际上保存了两次:一次在提供的 EXTRA_OUTPUT 位置,另一次在默认位置。这就是 OP 希望避免的。 - matteo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接