我正在开发一个应用程序,允许用户捕获安全文档的图像并将这些图像上传到服务器(我正在尝试做的一个很好的例子是一个银行应用程序,允许用户拍照检查。 )
出于安全原因,我不希望在可能的情况下将图像物理存储在磁盘上。
当我尝试使用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");
}
答案 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());
}