繁体   English   中英

Android:调用相机意图后活动被破坏

[英]Android: Activity getting Destroyed after calling Camera Intent

我有两个活动(A1,A2)。 A1 调用 A2 并从 A2 我调用相机意图如下

launchIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoPath);   
startActivityForResult(launchIntent,CAMERA_REQUEST);

它打开相机,我可以拍照。 但是一旦我单击保存按钮(s3 中的勾选按钮),问题就出现了,我的onActivityResult没有被调用,而是 A2 的 onDestroy 方法被调用。 我在 onActivityResult fn 中几乎没有逻辑要完成。

我已经在 Stackoverflow 中阅读了一些关于此的帖子,但我无法从中获得有用的输出。我的第二个活动(A2)有这样的清单

android:configChanges="keyboardHidden|orientation|locale"
android:screenOrientation="portrait

注意:在 HTC One X 中,我的 onActivityResult fn 被调用,但在我的 S3 中,第二个 Activity(A2) 被销毁

请分享您对此的想法。 提前致谢

我有同样的问题。我会疯的,但最后我在这里找到了解决方案。 问题是,当您单击相机的“保存”按钮时,活动调用更改方向方法并将销毁并重新创建。 尝试设置

android:configChanges="orientation|screenSize"

在 android manifest 中(不仅是android:configChanges="orientation"因为正如这里建议的那样,它不适用于 API 级别 13 或更高级别)。

它可以防止破坏活动,它对我有用。

启动相机需要大量内存。 因此,在内存不足的设备上,android 系统会关闭在后台运行的活动,因此调用 onCreate()。 由于您提供的此光路变为空,您将无法获得保存的图像。

解决方案是在系统破坏您的活动时保存光路,然后再次恢复它。

@Override
    public void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub

            outState.putString("photopath", photopath);


        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        if (savedInstanceState != null) {
            if (savedInstanceState.containsKey("photopath")) {
                photopath = savedInstanceState.getString("photopath");
            }
        }

        super.onRestoreInstanceState(savedInstanceState);
    }

如果您在 Fragment 上执行此操作。

@Override
    public void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub

            outState.putString("photopath", photopath));


        super.onSaveInstanceState(outState);
    }

    @Override
    public void onViewStateRestored(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        if (savedInstanceState != null) {
            if (savedInstanceState.containsKey("photopath")) {
                photopath = savedInstanceState.getString("photopath");
            }
        }

        super.onViewStateRestored(savedInstanceState);
    }

确保您没有打开“不保留活动”开发人员设置,因为它会破坏您要离开的活动。

相机应用程序需要大量内存,为了释放内存,操作系统必须杀死后台应用程序,包括您的应用程序。 这对于所有 Android 应用都是正常的。 当相机应用程序返回时,您的活动将被重新创建。 要保留活动状态信息,请覆盖onSaveInstanceState()以存储您的数据并在onCreate()读取它们。

当我调用 Camera Intent 时,我的 Activity 有很多任务正在运行。我有 GPS 位置侦听器,还有更多任务。

当它从 Camera Intent 返回时,我需要在地图上拍摄图像的位置添加标记。所以如果用户拍摄了多张照片,它应该为每张照片显示标记。

如果每次我调用 Camera Intent 时它都会破坏我的 Activity,我之前拥有的有关标记及其位置的所有信息都将丢失。而且,我将不得不再次初始化地图。 这对我的应用程序来说是一个大问题。

是的,只有当我在横向模式下拍照时才会发生这种情况。 如果我拍人像照片,到目前为止一切都很好..

我会尝试使用android:configChanges="orientation|screenSize"作为建议here..希望它会有所帮助!

对我来说,当我在开发人员模式下启用一个名为“不要保留活动”的选项时会发生这种情况。 在我取消选中它后,从图库或相机应用程序中选择图片时不会重新创建活动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM