以安全的方式从相机捕获全分辨率图像(如果可能,不存储到磁盘)

时间:2012-10-31 18:19:22

标签: android security android-camera android-camera-intent

我正在开发一个应用程序,允许用户捕获安全文档的图像并将这些图像上传到服务器(我正在尝试做的一个很好的例子是一个银行应用程序,允许用户拍照检查。 )

出于安全原因,我不希望在可能的情况下将图像物理存储在磁盘上。

当我尝试使用MediaStore.ACTION_IMAGE_CAPTURE意图执行此操作时,它可以工作......但分辨率非常低。我认为这是为了防止过度使用RAM。我一直在寻找解决方案,但我发现的所有解决方案都涉及将图像存储在SD卡或内部NAND存储器上。我不想那样做。

如果无法避免存储照片,是否有办法将图像存储到我的应用只能访问的位置?我会在上传后删除该文件。如果我必须这样做,有没有办法加密照片,因为它被存储?

这是我当前代码的简化,如果有帮助的话:

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent,requestCode);

protected void onActivityResult(int requestCode, int resultcode, Intent data)
{
    if (resultcode == RESULT_OK)
    {
        Bitmap bmp = getBitmapFromIntent(data);
    }
}
private Bitmap getBitmapFromIntent(Intent intent)
{
    Bundle extras = intent.getExtras();
    return (Bitmap) extras.get("data");
}

1 个答案:

答案 0 :(得分:2)

您可以直接在设备的内部存储上保存文件。默认情况下,保存到内部存储的文件对应用程序是私有的,而其他应用程序无法访问它们(用户也无法访问)。当用户卸载您的应用程序时,将删除这些文件。

String file_path = "/data/data/com.packagename/cache/";
            File dir = new File(file_path);
            if (!dir.exists())
                dir.mkdirs();
            File file = new File(dir, "1" + ".jpg");

            try {
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(data); // data in byte format
                fos.close();
            } catch (FileNotFoundException e) {
                Log.e("Not Found", "File not found: " + e.getMessage());
            } catch (IOException e) {
                Log.e("Not Found", "Error accessing file: " + e.getMessage());
        }