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();
}
}