出错的117行:camera.setParameters(params);
出错的89行:private void setOpenClickListener() {
和下面的代码:
open.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//开启摄像头
openCamera();
}
});
}
全部代码如下:
public class MainActivity extends Activity {
private Button open;
private Button play;
private Button close;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private Camera camera;
//private ToneGenerator tone;
//private Parameters params = null;
private final int previewWidth = 320;
private final int previewHeight = 240;
protected String filepath = "/sdcard/mypicture.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setListener();
}
private void initView() {
// TODO Auto-generated method stub
open = (Button) findViewById(R.id.open);
play = (Button) findViewById(R.id.play);
close = (Button) findViewById(R.id.close);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i("camera", "surfaceDestroyed");
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.i("camera", "surfaceCreated");
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Log.i("camera", "surfaceChanged");
}
});
}
private void setListener() {
setOpenClickListener();
setPlayClickListener();
setCloseClickListener();
}
private void setOpenClickListener() {
open.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//开启摄像头
openCamera();
}
});
}
protected void openCamera() {
// TODO Auto-generated method stub
//配置摄像头参数
if(camera!=null){
try{
camera = Camera.open();//这里不需要捕获异常么??
}catch(Exception e){
Log.i("camera","open camera error!");
e.printStackTrace();
return;
}
Camera.Parameters params = camera.getParameters();
params.setPreviewSize(previewWidth, previewHeight);
params.setPictureFormat(PixelFormat.JPEG);
params.setPictureSize(previewWidth, previewHeight);
camera.setParameters(params);
}
//启动预览
try {
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
Log.i("camera","preview failed!");
e.printStackTrace();
}
camera.startPreview();
}
private void setPlayClickListener() {
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//拍照
takePicture();
}
});
}
protected void takePicture() {
// TODO Auto-generated method stub
if(checkSDcard()){
camera.takePicture(null,null, jpeg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
camera.startPreview();
}else{
Log.i("camera","SD card not exit!");
//注意这里是log.e不是log.i
return;
}
}
private void setCloseClickListener() {
close.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//关闭摄像头
closeCamera();
}
});
}
protected void closeCamera() {
// TODO Auto-generated method stub
camera.stopPreview();
camera.release();
camera = null;
}
private PictureCallback jpeg = new PictureCallback() {
@SuppressWarnings("unused")
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
File pictureFile = new File(filepath);
if(pictureFile==null){
Log.i("camera","Error creating media file,check storage permission");
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
BufferedOutputStream bos = new BufferedOutputStream(fos);
bitmap.compress(Bitmap.CompressFormat.JPEG,80,bos);
bos.flush();
bos.close();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e){
Log.i("camera","Error accessing file:"+e.getMessage());
}
}
};
// private ShutterCallback shutterCallback = new ShutterCallback() {
//
// @Override
// public void onShutter() {
// // TODO Auto-generated method stub
// Log.i("camera","shutterCallback");
// if(tone==null){
// tone = new ToneGenerator(AudioManager.STREAM_MUSIC,ToneGenerator.MAX_VOLUME);
// tone.startTone(ToneGenerator.TONE_PROP_BEEP2);
// }
// }
// };
private boolean checkSDcard(){
if(android.os.Environment.getExternalStorageDirectory().equals(android.os.Environment.MEDIA_MOUNTED)){
return true;
}else{
return false;
}
}
}