通过意图在Android中捕获图像(ACTION_IMAGE_CAPTURE)

时间:2012-10-22 09:00:35

标签: android security android-intent camera image

是否有一种“安全”方式来调用具有意图MediaStore.ACTION_IMAGE_CAPTURE来捕获图片的Android摄像头? 我使用以下代码从相机拍摄快照:

Uri tempFile = Uri.fromFile(tempFile()); // returns a temporary stored files that is "Context.MODE_WORLD_WRITEABLE" so that android can put the file in this location
// tempFile looks like: file:///data/data/com.example.myapp/files/temp_picture.jpg
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra(MediaStore.EXTRA_OUTPUT, tempFile);
startActivityForResult(camera, Constants.REQUESTCODE_PICTURE_RESULT);

之后(从相机“RESULT_OK”返回)我将tempFile复制到受保护的应用商店Context.MODE_PRIVATE并删除tempFile。 一切正常,图片被拍摄并存储在给定的Uri上。但是图像也被放置在galery中(在我目前的开发设备“HTC Sensation”的情况下) 来自我的设备(位置为/mnt/sdcard/DCIM/100MEDIA/IMAG00XX.jpg)。为什么图片存储了两次,我甚至没有在我的代码中提到这个位置?这是HTC“功能”还是Android相机将文件存储两次用于媒体 扫描?

我还试图通过省略MediaStore.EXTRA_OUTPUT参数来从相机中获取位图,但是使用此代码我只能从相机获得一个拇指大小的图片(没有完整分辨率)。

我读了很多关于Android相机的内容,但是我必须以“安全”的方式从相机中取出图像(没有其他应用程序应该读取从相机中获取的数据)。我已经 考虑实现我自己的相机表面以捕捉图片,但是通过这种方法,我必须编写相机应用程序内置已经提供的许多东西(闪光灯,饱和度,效果,缩放......)。在android系统上拍照真的很难吗?

2 个答案:

答案 0 :(得分:1)

如果您希望它“安全”,请在您的应用中构建相机功能。无法确定预装在设备上的随机相机应用程序是做什么的。他们可能会在您不知情的情况下将图片发送到某个服务器。可靠地做起来并不容易,但您只能构建基本功能。如果做不到这一点,则需要一个您信任的特定应用程序来捕获图像,方法是明确显示intent(指定包名称)。当然,这将要求用户首先安装它,如果它还没有。

答案 1 :(得分:0)

我已经按照你的方式实现了相机。它创建图像并将其保存在我创建的文件夹中。但同时它也将图像保存在图库中。如果其他应用也这样做,我已经检查了这个。并发现即使是其他应用程序也可以做到,而且只有HTC的问题已经在各种设备上进行了测试。我在想它是如何工作的。