2016-12-28 91 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卡中,然後在使用後刪除文件。 –

相關問題