1

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

出于安全原因,我不希望图像在任何时候都物理存储在磁盘上,如果可能的话。

当我尝试使用 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");
}
4

1 回答 1

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());
        }
于 2012-10-31T18:37:59.380 回答