2016-12-28 84 views
0

我的要求是从Android中的相机拍摄照片,而不是将照片保存在文件中,而是将其保存在存储器中,因此文件不是被留下来。如何在Android中拍照但将其保存在内存中

我知道一个选择是之后删除文件,但这还不够好,我需要另一个级别的安全性,所以根本没有留下任何痕迹。以下代码来自“简单拍照”,为简洁起见,我缩短了代码。

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     // **Create the File** where the photo should go 
     File photoFile = createImageFile(); 
     if (photoFile != null) { 
      Uri photoURI = FileProvider.getUriForFile(...,...,photoFile); 
      takePictureIntent.putExtra(..., photoURI); 
      startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 
     } 
    } 

String mCurrentPhotoPath; 

private File createImageFile() throws IOException { 
    // Create an **image file** name 
    return image; 
} 

这里的要点是需要一个“文件”,我需要删除它。到目前为止,我的研究使我创建了自己的ContentProvider,像这样https://gist.github.com/m039/6550133“Custom ContentProvider”,基于内存数组(android)。我希望得到比这更简单的解决方案。任何其他想法将不胜感激,谢谢。

回答

1

到目前为止,我的研究使我创建了自己的ContentProvider,像这样https://gist.github.com/m039/6550133“Custom ContentProvider”,基于内存数组(android)。

该特定ContentProvider示例将是有限的使用,因为它实际上没有什么与此用例有关。话虽如此,有一个ContentProvider你把结果流到内存,而不是磁盘,是你的唯一有点可行的解决方案ACTION_IMAGE_CAPTURE。请记住,这种做法是行不通的大部分时间,这是因为:

  • 您可能无法分配,你需要,特别是因为,严格地说内存缓冲区,你不知道有多大它需要提前。您可以使用相机API,找到最高分辨率,然后使用它来提前调整内存缓冲区的大小,但即使如此,由于堆碎片,您仍然会遇到挑战。

  • 并不是所有的相机应用程序都支持content作为Uri方案。例如,谷歌直到2016年夏天才支持它。到2018年左右,大多数相机应用程序应支持content(我希望),但即使如此,它也不会100%。

我所期待的比这更简单的解决方案。

您可以直接使用相机API,但这会更复杂。

我期待在我CWAC-时间段2库添加something to help with this,虽然我还没有实现为2016年后期

你可以看到,如果有这种支持让你在内存中的结果的其他相机库。

就是这样。

+0

将文件存储在SD卡中,然后在使用后删除文件。 –

相关问题