Android:如何在不存储文件的情况下从相机获取图像?

时间:2015-05-17 16:33:30

标签: android camera storage ram

我正在使用系统的活动来从相机中获取图像。

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中获取图像,处理它,然后返回方法将所有内容留给垃圾收集器。 我不希望同时处理图库中的照片。

2 个答案:

答案 0 :(得分:3)

  

如何在不存储文件的情况下从相机获取图像?

直接使用相机API(android.hardware.Cameraandroid.hardware.camera2.*)。

目前,您正在将相机工作委托给第三方应用。在约15亿台Android设备上有数百种预安装的摄像头应用程序,Play商店和其他地方有数百种(可能数千种)。用户可以选择使用其中任何一个来处理您的startActivityForResult()电话。这些应用程序的作用主要取决于它们。如果他们希望将图像保存到磁盘除了返回"data"缩略图,这是他们的选择,而不是你的。

答案 1 :(得分:0)

如果在启动相机意图时未提供文件uri作为图像的位置,则系统将不保存图像。与此配置一样,您的图像已存储在内存中,一旦您丢失对它的引用,将不再使用(垃圾回收)。