我遇到了一个问题,当您点击“取消”时,使用意图捕获图像会导致内存问题。而不是'好的'照片拍完后。点击取消或返回时不会返回ActivityResult。相反,它似乎只是将图像保存在缓存中,并重新启动相机活动。问题是,在第三张或第四张图片上,它崩溃了应用程序,因为它没有返回活动结果,我不知道如何处理内存泄漏。
我目前正在使用此代码启动目标。
static Uri m_CapturedImageURI;
void TakePhoto()
{
try
{
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
m_CapturedImageURI = getContentResolver().insert
(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, m_CapturedImageURI);
startActivityForResult(takePictureIntent, 1);
}
catch (Exception e) { Log.d("Exception:", e.toString()); e.printStackTrace(); }
}
但是我也试过这个代码,直接在这里找到了android的开发人员部分:http://developer.android.com/training/camera/photobasics.html
static final int REQUEST_IMAGE_CAPTURE = 1;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
即便如此,复制和粘贴也会产生相同的问题,即不返回活动结果,最终会在3-4张照片后崩溃。
有人能指出我正确的方向吗?
答案 0 :(得分:0)
保存图像路径:
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
if(mImageCaptureUri!=null)
savedInstanceState.putString("camera_image", mImageCaptureUri.toString());
super.onSaveInstanceState(savedInstanceState);
}
从中检索图像路径:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("camera_image")) {
mImageCaptureUri = Uri.parse(savedInstanceState.getString("camera_image"));
}
}
super.onRestoreInstanceState(savedInstanceState);
}
发生此问题时,仅当用户转到相机意图时,并且当他捕获图像时,托管相机意图的活动在用户从相机意图返回时被破坏或重新创建。