0

是否有一种“安全”的方式来调用 android 相机MediaStore.ACTION_IMAGE_CAPTURE以捕捉图片?我正在使用以下代码从相机拍摄快照:

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 上。但图像也被放置在我的设备(位置是)的画廊中(如果是我当前的开发设备“HTC Sensation” /mnt/sdcard/DCIM/100MEDIA/IMAG00XX.jpg)。为什么图片存储了两次,我的代码中甚至没有提到这个位置?这是 HTC 的“功能”还是 android 相机将文件存储两次以进行媒体扫描?

我还尝试通过省略MediaStore.EXTRA_OUTPUT参数从相机中获取位图,但是使用此代码我只能从相机中获取缩略图(没有全分辨率)。

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

4

2 回答 2

1

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

于 2012-10-23T03:34:35.737 回答
0

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

于 2012-10-23T04:33:31.880 回答