将图片保存到内存中

时间:2011-11-27 19:39:20

标签: android file memory storage photo

我需要使用设备相机拍照,将其保存到内存中并获取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();
        }
       }
   }

非常感谢来自更有经验的人的帮助。

1 个答案:

答案 0 :(得分:0)

要保留内存中的内容,您只需声明一个变量或数据结构来保存它;在这种情况下,某种形式的字节数组似乎很有希望。不过,在这种情况下,我认为这不会很有效。 Android中的堆通常上限为16或25 MB,并且根据您的应用程序正在进行的其他操作,存储照片会很快出现“内存不足”异常。

因此,如果没有SD卡,这将使您无法写入内部存储。我不知道内部存储上的哪个目录(如果有的话)应用程序可以在没有root访问权限的情况下编写和/或挂载系统读/写,但我认为最好的选择是/ data / tmp。看看你是否可以在那里保存图片。如果没有,安装系统读/写也不是那么糟糕。