相机 - > ActivityForResult - > BackPress - >相机

时间:2015-10-21 14:32:56

标签: android camera start-activity

我目前正在使用自定义相机,但是当我选择从图库中选择图像并按回然后继续拍照时,它会在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);

2 个答案:

答案 0 :(得分:0)

正确的解决方案:

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

谢谢艾哈迈德!

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

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

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

答案 1 :(得分:0)

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

我认为这link可以帮助你: