2013-08-02 41 views
0

我是Android新手。我想知道,爲什麼當我點擊/按回到我的模擬器其總是不幸cameraActivity已停止 這是我CameraTestActivity發佈後調用方法()錯誤

public class CameraTestActivity extends Activity 
{ 
private Camera mCamera; 
private CameraPreview mPreview; 
private Handler autoFocusHandler; 

TextView scanText; 
Button scanButton, btn_next; 

ImageScanner scanner; 

private boolean barcodeScanned = false; 
private boolean previewing = true; 

static { 
    System.loadLibrary("iconv"); 
} 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    autoFocusHandler = new Handler(); 
    mCamera = getCameraInstance(); 

    /* Instance barcode scanner */ 
    scanner = new ImageScanner(); 
    scanner.setConfig(0, Config.X_DENSITY, 3); 
    scanner.setConfig(0, Config.Y_DENSITY, 3); 

    mPreview = new CameraPreview(this, mCamera, previewCb, autoFocusCB); 
    FrameLayout preview = (FrameLayout)findViewById(R.id.cameraPreview); 
    preview.addView(mPreview); 

    scanText = (TextView)findViewById(R.id.scanText); 

    btn_next = (Button)findViewById(R.id.button1); 
    btn_next.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent (CameraTestActivity.this, 
          SecondActivity.class); 
      startActivity(intent); 
     } 
    }); 

    scanButton = (Button)findViewById(R.id.ScanButton); 

    scanButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       if (barcodeScanned) { 
        barcodeScanned = false; 
        scanText.setText("Scanning..."); 
        mCamera.setPreviewCallback(previewCb); 
        mCamera.startPreview(); 
        previewing = true; 
        mCamera.autoFocus(autoFocusCB); 
       } 
      } 
     }); 
} 

public void onPause() { 
    super.onPause(); 
    releaseCamera(); 
} 

/** A safe way to get an instance of the Camera object. */ 
public static Camera getCameraInstance(){ 
    Camera c = null; 
    try { 
     c = Camera.open(); 
    } catch (Exception e){ 
    } 
    return c; 
} 

private void releaseCamera() { 
    if (mCamera != null) { 
     previewing = false; 
     mCamera.setPreviewCallback(null); 
     mCamera.release(); 
     mCamera = null; 
    } 
} 

private Runnable doAutoFocus = new Runnable() { 
     public void run() { 
      if (previewing) 
       mCamera.autoFocus(autoFocusCB); 
     } 
    }; 

PreviewCallback previewCb = new PreviewCallback() { 
     public void onPreviewFrame(byte[] data, Camera camera) { 
      Camera.Parameters parameters = camera.getParameters(); 
      Size size = parameters.getPreviewSize(); 

      Image barcode = new Image(size.width, size.height, "Y800"); 
      barcode.setData(data); 

      int result = scanner.scanImage(barcode); 

      if (result != 0) { 
       previewing = false; 
       mCamera.setPreviewCallback(null); 
       mCamera.stopPreview(); 

       SymbolSet syms = scanner.getResults(); 
       for (Symbol sym : syms) { 
        scanText.setText("barcode result " + sym.getData()); 
        barcodeScanned = true; 
       } 
      } 
     } 
    }; 

// Mimic continuous auto-focusing 
AutoFocusCallback autoFocusCB = new AutoFocusCallback() { 
     public void onAutoFocus(boolean success, Camera camera) { 
      autoFocusHandler.postDelayed(doAutoFocus, 1000); 
     } 
    }; 
} 

有一個在我的第二個活動無功能。但每當我按回到我的設備與CameraTestActivity找回它說的方法釋放後稱爲() 這是我的logcat錯誤:

08-02 15:01:56.620: E/AndroidRuntime(7772): java.lang.RuntimeException: Method called 
after release() 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.hardware.Camera.setPreviewDisplay(Native Method) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.hardware.Camera.setPreviewDisplay(Camera.java:407) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at   
net.sourceforge.zbar.android.CameraTest.CameraPreview.surfaceCreated(CameraPreview. 
java:69) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at  
android.view.SurfaceView.updateWindow(SurfaceView.java:533) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:226) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.view.View.dispatchWindowVisibilityChanged(View.java:5844) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:945) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:945) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:945) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:945) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:945) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:965) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.os.Handler.dispatchMessage(Handler.java:99) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.os.Looper.loop(Looper.java:137) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.app.ActivityThread.main(ActivityThread.java:4424) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
java.lang.reflect.Method.invokeNative(Native Method) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
java.lang.reflect.Method.invoke(Method.java:511) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
dalvik.system.NativeStart.main(Native Method) 

可能有人幫我解決這一個。

回答

0

看看你的日誌:

08-02 15:01:56.620: E/AndroidRuntime(7772): java.lang.RuntimeException: Method called 
after release() 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.hardware.Camera.setPreviewDisplay(Native Method) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at 
android.hardware.Camera.setPreviewDisplay(Camera.java:407) 
08-02 15:01:56.620: E/AndroidRuntime(7772):  at   
net.sourceforge.zbar.android.CameraTest.CameraPreview.surfaceCreated(CameraPreview. 
java:69) 

是後叫surfaceCreated?在您的中,您已經釋放了您的相機。覈實。

+0

不,但在我的Camera Preview類中有surfaceCreated方法,但根據您的崩潰日誌從未調用 – Drx

+0

,CameraPreview被調用。在surfaceCreated處設置斷點並在按下後退按鈕時調試您的應用程序 – yushulx

0

您應該實現onResume()方法,因爲在按下後退按鈕後返回上一個活動時會調用它。