第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码
<uses-permission android:name="android.permission.CAMERA"/>//摄像头权限
SD卡读写权限
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第二步,要将摄像头捕获的图像实时地显示在手机上。
我们是用SurfaceView这个视图组件来实现的,因此在main.xml中加入下列代码
<SurfaceView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/surfaceview"
/>
第三步,摄像头预览
public class MainActivity extends Activity implements SurfaceHolder.Callback
继承Activity,实现SurfaceHolder.Callback,MainActivity里需要我们复写以下几个方法:
- @Override
- public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
- System.out.println("surfacechanged");
- }
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- System.out.println("surfacecreated");
-
- camera = Camera.open();
- try {
-
- camera.setPreviewDisplay(holder);
- Camera.Parameters parameters = camera.getParameters();
-
- if (this.getResources().getConfiguration().orientation
- != Configuration.ORIENTATION_LANDSCAPE) {
- parameters.set("orientation", "portrait");
- camera.setDisplayOrientation(90);
- parameters.setRotation(90);
- } else {
- parameters.set("orientation", "landscape");
- camera.setDisplayOrientation(0);
- parameters.setRotation(0);
- }
- camera.setParameters(parameters);
-
- camera.startPreview();
- System.out.println("camera.startpreview");
-
- } catch (IOException e) {
- e.printStackTrace();
- camera.release();
- System.out.println("camera.release");
- }
- }
- @Override
- public void surfaceDestroyed(SurfaceHolder arg0) {
- System.out.println("surfaceDestroyed");
- if (camera != null) {
- camera.stopPreview();
- camera.release();
- }
- }
当然还有onCreate方法
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- context = this;
-
- surfaceview = (SurfaceView)findViewById(R.id.surfaceview);
- surfaceholder = surfaceview.getHolder();
- surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- surfaceholder.addCallback(SafeActivity.this);
- }
,
当然有些变量还需要定义,
- private static Context context = null;
- private SurfaceView surfaceview;
- private SurfaceHolder surfaceholder;
- private Camera camera = null;