2011-11-27 122 views
0

我需要使用設備相機拍照,將其保存到內存中並獲取uri,以便以後通過電子郵件發送。將圖片保存到內存中

我在沒有存儲卡的設備上使用Android 3.2(只有11個內部存儲)。

private void takePicture(){ 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, 1); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data){ 
     if(requestCode == CAMERA_PIC_REQUEST && resultCode == Activity.RESULT_OK){ 
      picture = (Bitmap) data.getExtras().get("data"); 
      pictureView.setImageBitmap(picture); 

      ContentValues values = new ContentValues(); 
      values.put(Images.Media.TITLE, "Picture"); 
      values.put(Images.Media.BUCKET_ID, "picture_ID"); 
      values.put(Images.Media.DESCRIPTION, ""); 
      values.put(Images.Media.MIME_TYPE, "image/jpeg"); 

      pictureUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); 
      OutputStream outstream; 

      try{ 
       outstream = getContentResolver().openOutputStream(pictureUri); 
       picture.compress(Bitmap.CompressFormat.JPEG, 100, outstream); 
       outstream.close(); 
      }catch(FileNotFoundException e){ 

      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 
    } 

任何有關此方面經驗豐富的人的幫助將不勝感激。

回答

0

爲了保持內存中的東西,你只需聲明一個變量或數據結構來保存它;在這種情況下,某種形式的字節數組似乎很有前途。不過,我認爲這種情況在這種情況下不會奏效。 Android中的堆通常限制在16或25 MB,並且取決於您的應用程序在做什麼來存儲照片會很快得到「內存不足」異常。

因此,如果沒有SD卡,這會讓您寫入內部存儲器。我不知道應用程序可以在沒有root權限和/或安裝系統讀/寫的情況下寫入內部存儲器上的哪些目錄(如果有的話),但我認爲最好的選擇是/ data/tmp。看看你是否可以在那裏保存圖片。如果沒有,安裝系統讀/寫也不是那麼糟糕。