Android Camera简单例程

CameraDemoActivity.java

package com.lau.camera;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class CameraDemoActivity extends Activity 
					implements SurfaceHolder.Callback, OnClickListener {
	
	private Button btnPlay = null;
	private SurfaceView surfaceView = null;
	private SurfaceHolder holder = null;
	private Camera mCamera = null;

	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        viewInit();
    }

    private void viewInit() {
    	btnPlay = (Button) findViewById(R.id.ok);
    	surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
    	holder = surfaceView.getHolder();
    	holder.addCallback(this);
//        holder.setFixedSize(176, 144);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    	btnPlay.setOnClickListener(this);
    }
    

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		if(v.getId() == btnPlay.getId()) {
			mCamera.takePicture(null, null, new PicCallback());
		}
	}
	
	class PicCallback implements PictureCallback {
		@Override
		public void onPictureTaken(byte[] data, Camera camera) {
			// TODO Auto-generated method stub
			Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
			SimpleDateFormat dataFormat = new SimpleDateFormat("yyyyMMdd");
			Date date = new Date(System.currentTimeMillis());
			String time = dataFormat.format(date);
			File picFile = new File(Environment.getExternalStorageDirectory() + "/books/" + time + ".jpg");
			if(!picFile.exists()) {
				try {
					picFile.createNewFile();
					BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(picFile));
					bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);
					bos.flush();
					bos.close();
					Toast.makeText(getApplicationContext(), "Success", 3000).show();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					print("Take picture fail.");
				}
			}
		}
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
		print("surface changed");
		mCamera.startPreview();
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		print("surface created");
		try {
			//注意这里不能放在onCreate()里面,否则将无法形成预览效果
			mCamera = Camera.open();
			print("open camera success");
		} catch (Exception e) {
			mCamera = Camera.open(Camera.getNumberOfCameras()-1);
			e.printStackTrace();
		}
		if(mCamera != null) {
			try {
				mCamera.setPreviewDisplay(holder);
				mCamera.setDisplayOrientation(90);
			} catch (IOException e) {
				e.printStackTrace();
			}
		} else {
			Toast.makeText(getApplicationContext(), "Open Camera Fail, exit!", 3000).show();
			finish();
		}
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		mCamera.stopPreview();
		mCamera.release();
		mCamera = null;
	}
	
	private void print(Object o) {
		Log.d("DEBUG", "" + o);
	}
}


 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <SurfaceView
        android:id="@+id/surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />

    <Button
        android:id="@+id/ok"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="OK" />

</RelativeLayout>


权限:

	<uses-permission android:name="android.permission.CAMERA"/>
	<uses-feature android:name="android.hardware.camera" />
	<uses-feature android:name="android.hardware.camera.autofocus" />
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

参考链接:

http://www.eoeandroid.com/thread-2193-1-1.html

http://blog.csdn.net/liujianminghero/article/details/7464038

http://topic.csdn.net/u/20120518/14/00457380-e333-46f8-9d7f-8eee0d82e3b9.html

http://vaero.blog.51cto.com/4350852/779942

http://stackoverflow.com/questions/3890381/camera-setparameters-failed-in-android   setParameters failed,可见此贴。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值