我正在使用系统的活动来从相机中获取图像。
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST);
当用户接受照片时,我使用此回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST && resultCode == RESULT_OK) {
Bitmap bp = (Bitmap) data.getExtras().get("data");
/*
* DO SOMETHING WITH IMAGE ...
*/
getContentResolver().delete(data.getData(), null, null);
}
}
}
最后一行删除系统存储的文件。
它有效,但是可以避免使用大容量存储(使用相应的uses-permission
)?我想从RAM中获取图像,处理它,然后返回方法将所有内容留给垃圾收集器。
我不希望同时处理图库中的照片。
答案 0 :(得分:3)
如何在不存储文件的情况下从相机获取图像?
直接使用相机API(android.hardware.Camera
,android.hardware.camera2.*
)。
目前,您正在将相机工作委托给第三方应用。在约15亿台Android设备上有数百种预安装的摄像头应用程序,Play商店和其他地方有数百种(可能数千种)。用户可以选择使用其中任何一个来处理您的startActivityForResult()
电话。这些应用程序的作用主要取决于它们。如果他们希望将图像保存到磁盘除了返回"data"
缩略图,这是他们的选择,而不是你的。
答案 1 :(得分:0)
如果在启动相机意图时未提供文件uri作为图像的位置,则系统将不保存图像。与此配置一样,您的图像已存储在内存中,一旦您丢失对它的引用,将不再使用(垃圾回收)。