2011-11-27 103 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。看看你是否可以在那里保存图片。如果没有,安装系统读/写也不是那么糟糕。