我需要使用设备相机拍照,将其保存到内存中并获取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 :(得分:0)
要保留内存中的内容,您只需声明一个变量或数据结构来保存它;在这种情况下,某种形式的字节数组似乎很有希望。不过,在这种情况下,我认为这不会很有效。 Android中的堆通常上限为16或25 MB,并且根据您的应用程序正在进行的其他操作,存储照片会很快出现“内存不足”异常。
因此,如果没有SD卡,这将使您无法写入内部存储。我不知道内部存储上的哪个目录(如果有的话)应用程序可以在没有root访问权限的情况下编写和/或挂载系统读/写,但我认为最好的选择是/ data / tmp。看看你是否可以在那里保存图片。如果没有,安装系统读/写也不是那么糟糕。