如何在onPause()方法上处理来自另一个活动的相机预览?

时间:2011-11-03 05:50:43

标签: android android-layout android-emulator android-widget android-camera

mPreview是CameraActivity的对象。我从我的主要活动运行相机视图。 现在在MainActivity中有onPause()方法。

RightNow就像这样:

protected void onPause() {
   super.onPause();
   if (counter>=2) {
        System.exit(0);
   }
}

但是这个代码。如果进入暂停状态,我的应用程序将退出。 如果用户从设备暂停回来,我想让我的应用程序再次运行。

所以为此我实施了这个代码:

    protected void onPause() {
        super.onPause();
        if (counter>=2) {
            //System.exit(0);
            try {
                if (mPreview.mCamera!=null) {
                    mPreview.mCamera.stopPreview();  
                    mPreview.isPreviewRunning=false;
                    mPreview.mCamera.release();
                }
            } catch (Exception e) {
                Log.e("Camera", e.getMessage());
            }
            //mPreview.mCamera.stopPreview();
        }
        else{
//          mPreview.mCamera.startPreview();
            mPreview.isPreviewRunning=false;
        }
    }
}

但是使用这段代码,有时候我的应用程序崩溃了。所以我在哪里实施它?

堆栈追踪:

11-03 12:26:21.748: ERROR/AndroidRuntime(4295): FATAL EXCEPTION: main
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): java.lang.RuntimeException: Method called after release()
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at android.hardware.Camera.setHasPreviewCallback(Native Method)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at android.hardware.Camera.access$600(Camera.java:114)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at android.hardware.Camera$EventHandler.handleMessage(Camera.java:472)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at android.os.Looper.loop(Looper.java:123)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at android.app.ActivityThread.main(ActivityThread.java:4633)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at java.lang.reflect.Method.invokeNative(Native Method)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at java.lang.reflect.Method.invoke(Method.java:521)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295):     at dalvik.system.NativeStart.main(Native Method)
11-03 12:26:21.758: WARN/ActivityManager(171):   Force finishing activity de.offis.magic.core/.GLCamTest

感谢。

2 个答案:

答案 0 :(得分:1)

@覆盖     public void surfaceDestroyed(SurfaceHolder surfaceHolder){

    this.getHolder().removeCallback(this);
    mCamera.stopPreview();
    mCamera.release();
    mCamera = null;
  Log.e("surfaceDestroyed", "surfaceDestroyed");
}

然后在Resume功能上重新初始化相机。

答案 1 :(得分:0)

尝试调用super.onPause();停止预览并释放手柄后。 这对我有用。