0

14未満のAndroid APIレベルで動作する私のサンプルカメラコード

API レベル 14 以上で試したところ、null ポインタ例外がスローされました。どこが間違っているのか教えてください。

protected void onStart() {
    super.onStart();
    cam= Camera.open();
    Log.e("msg", cam+"");
    mp=new MyPreview(getApplicationContext(), cam);
    frame1.addView(mp);
    Toast.makeText(getApplicationContext(), "Camera open", 5).show();
}

Mypreviewは、SurfaceView を拡張し、SurfaceHolder.CallBack を実装するクラスです。

コードは次のとおりです。

import java.io.IOException;

import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MyPreview extends SurfaceView implements SurfaceHolder.Callback {
private Camera _cam;
private SurfaceHolder sh;

@SuppressWarnings("deprecation")
public MyPreview(Context context, Camera _cam) {
    super(context);
    this._cam = _cam;
    sh=getHolder();
    sh.addCallback(this);
    sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    // TODO Auto-generated method stub

    Camera.Parameters cp = _cam.getParameters();
    cp.setPreviewSize(width, height);

    cp.setFlashMode(Parameters.FLASH_MODE_AUTO);


    _cam.setParameters(cp);
    _cam.setDisplayOrientation(90);

    _cam.startPreview();

}



@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        _cam.setPreviewDisplay(holder);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    _cam.stopPreview();
}

}
4

0 に答える 0