35

我正在尝试使用意图拍照。我的问题是,有时在拍照后,我调用 startActivityForResult 的活动似乎已被破坏,因此再次调用 onCreate。

这是我单击图像视图后拍照的代码,应该替换哪个图像:

if (!getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA)) {
            Util.makeLongToast(R.string.lang_no_camera);
        } else {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, TAKE_ITEM_PHOTO);
        }

...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.v(TAG, "onactivityresult called");
    if (requestCode == TAKE_ITEM_PHOTO) {
        if (data != null) {

            imageUri = data.getData();


                try {
                    img_photo.setImageBitmap(Media.getBitmap(
                            getContentResolver(), imageUri));
            } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

        } else
            Log.w(TAG, "data is null");
    }
}

所以我尝试的只是拍照并用它替换图像视图的图像。但在某些情况下, onCreate 是在 onActivityResult 被调用之后调用的,并且新图像丢失了。

非常感谢您的帮助。

4

4 回答 4

112

实际上,相机会导致您的活动方向发生变化,这就是您的活动被销毁和重新创建的原因。

将此添加到您的清单文件中,它将防止方向更改,并且您的活动不会被破坏和重新创建。

<activity
    android:name=".YourActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:screenOrientation="portrait" >
</activity>
于 2012-05-02T09:58:53.277 回答
1

修复您的活动/应用程序的方向,因为当您返回/完成()活动并同时更改方向时,活动会自动刷新并重新启动。

于 2012-05-02T09:35:53.860 回答
1

似乎有些手机在导入图像时会破坏活动,例如 Galaxy S3。提到如果我的应用程序处于纵向模式,则会发生这种情况,因为图像处于横向模式。因此,清单文件中与 configChanges 相关的所有建议都不适用于这种情况。

我最终做的不是与活动的 onDestroy 作斗争(这导致在 onCreate() 之后不调用片段的 onActivityResult()),而是在活动本身中实现 ​​onActivityResult() 并且在那里我可以获得图片路径。然后,我将该路径传递给片段,一旦它被创建,以供进一步处理。当然,我必须告诉我的应用程序,一旦它被重新创建,它需要返回到调用 fragmnet 来处理该图像

于 2016-06-28T09:01:09.787 回答
1

禁用“不保留活动”开发人员设置。否则它将破坏您要离开的活动。

于 2019-01-23T09:58:27.630 回答