【问题标题】:Camera -> ActivityForResult -> BackPress -> Camera相机->结果活动->后按->相机
【发布时间】:2015-10-21 14:32:55
【问题描述】:

我目前正在使用自定义相机,但是当我选择从图库中选择图像并按下回然后继续拍照时,它会在 mCamera 实例中的空指针上崩溃。

当我打开画廊时,我选择释放相机,这很有效。之后,当我按回时,它会出现在结果活动中。从那里我手动调用创建相机需要的所有实例的方法。但是,当调用 mCamera.open 时,它会给出一个错误,我发现了它。但是当我想拍照时它会崩溃,因为 mCamera 是空的。

我在这里做错了什么?我释放了相机,所以它应该能够得到一个新的。

编辑:

发布:

Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(i, 100);

        try {
            mCamera.release();
            Log.e("Camera", "Camera has been released");
        } catch (NullPointerException E){
            E.printStackTrace();
        }

创建:

// Create an instance of Camera
    mCamera = getCameraInstance();

    // Create our Preview view and set it as the content of our activity.
    mPreview = new CameraPreview(this, mCamera);
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
    preview.addView(mPreview);

【问题讨论】:

  • 您能否发布一些代码,以便我们查看您的操作。
  • 我已经添加了请求的代码^ 第一行从创建将不会成功,因为它无法打开相机。
  • 感谢 Ahmed 成功了,我之前忘记了一些事情。但现在可以了,谢谢!

标签: android camera start-activity


【解决方案1】:

正确的解决方案:

http://www.stackoverflow.com/a/19312951/867591

谢谢艾哈迈德!

“没错,你已经在onStart方法中打开你的相机,在你的activity的onStop方法中释放它。onResume和onPause方法是android活动可见生命周期的一部分。当另一个活动时调用onStop占据整个可见空间。当另一个活动进入前台时,甚至会调用 OnPause,即使它没有占据整个可见空间,例如弹出时的意图选择器对话框。所以我想将您的相机创建和释放移动到正确的生命周期方法应该可以解决问题。您可以在此处找到有关活动生命周期的更多信息,但我相信您对此很熟悉:

http://developer.android.com/reference/android/app/Activity.html"

我做错了什么?实际上,我在 onResume 中完成了所有创建工作,但是将其切换到 onStart 解决了问题。

【讨论】:

    【解决方案2】:

    确保您在onCreate() 方法中调用getCameraInstance() 方法,因为如果您在onCreate() 方法之外调用它,相机将不会启用并且会给您一个空指针异常。

    我觉得这个link可以帮到你:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多