相机应用程序在启动时崩溃

Camera App Crash at start

您好,我正在尝试按照 android 开发人员指南构建自定义相机应用程序。代码很干净,没有错误,我按照指南一步步操作,但是当我启动应用程序时它崩溃了。我正在使用已弃用的相机 api。

这是我自己的名为 CameraPreview 的 SurfaceView 的代码

package guide.android.cameraappandroidguide;

import android.content.Context;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.io.IOException;


public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{

private static final String TAG = "Error";

private SurfaceHolder mHolder;
private android.hardware.Camera mCamera;


public CameraPreview(Context context,android.hardware.Camera mCamera) {
    super(context);
    this.mCamera = mCamera;

    mHolder = getHolder();
    mHolder.addCallback(this);
}


@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();
        Log.e("Surface creata","Ottimo");
    } catch (IOException e) {
        Log.e(TAG,"Error setting camera preview: " + e.getMessage());
    }

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    if(mHolder.getSurface()==null){
        return;
    }

    try {
        mCamera.stopPreview();
    }catch (Exception e){
        Log.e(TAG,"Error setting camera preview: "+e.getMessage());
    }

    try {
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();
    } catch (IOException e) {
        e.printStackTrace();
        Log.e(TAG,"Error setting preview: "+e.getMessage());
    }


}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}
}

这是我的 MainActivity

package guide.android.cameraappandroidguide;

import android.hardware.Camera;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {

private Camera mCamera;
private CameraPreview mCameraPreview;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Full screen
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);

    mCamera = getCameraInstance();
    mCameraPreview = new CameraPreview(this,mCamera);

    FrameLayout frameLayoutPreview = (FrameLayout)findViewById(R.id.frame_layout_preview);
    frameLayoutPreview.addView(mCameraPreview);

}

@Override
protected void onPause() {
    super.onPause();
    releaseCamera();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    releaseCamera();
}


public static Camera getCameraInstance(){
    Camera c= null;
    //Proviamo ad aprire la Camera
    try {
        c = Camera.open();
    }catch (Exception e){
        Log.e("Error","Can't open th camera device");
    }
    return c;
};

public void releaseCamera(){
    if(mCamera!=null){
        mCamera.release();
        mCamera=null;
    }

}

}

这是我的LogCat。

enter image description here

应用程序启动时崩溃,我不明白是什么问题.. 任何人都可以帮助我了解如何使用 logcat 或其他调试方法找到错误?

谢谢

尝试添加这一行:

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

在此之后:

mHolder = getHolder();
mHolder.addCallback(this);