本文章只是讲解在Android中调用摄像头, 并无拍照功能。

权限申请:

<uses-permission android:name="android.permission.CAMERA" />

首先, 我们需要先在XML里添加一个SurfaceView控件来显示摄像头拍摄到的画面。

<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><SurfaceView android:id="@+id/surface" android:layout_width="fill_parent"  android:layout_height="fill_parent"  ></SurfaceView></LinearLayout>


然后, 在JAVA中我们需要实现SurfaceHolder.Callback这个接口, 它有三个方法

@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height){}@Overridepublic void surfaceCreated(SurfaceHolder holder){InitCamera();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder){// TODO Auto-generated method stub}


surfaceChanged: 当摄像头屏幕改变时

surfaceCreated: 当摄像头创建完毕时(我们可以在这里对摄像头进行初始化)

surfaceDestroyed:摄像头关闭时

下面是源码:

public class Page extends Activity implements SurfaceHolder.Callback{private Camera mCamera;private SurfaceHolder mSurfaceHolder;  //SurfaceView的控制类private SurfaceView mSurfaceView;private boolean isPreview = false;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.ar_page);mSurfaceView = (SurfaceView)findViewById(R.id.surface);mSurfaceHolder = mSurfaceView.getHolder();mSurfaceHolder.addCallback(this);//设置回调mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height){}@Overridepublic void surfaceCreated(SurfaceHolder holder){//初始化摄像头InitCamera();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder){// TODO Auto-generated method stub}private void InitCamera(){if(isPreview) return;mCamera = Camera.open();if(mCamera != null){try{mCamera.setPreviewDisplay(mSurfaceHolder);mCamera.setDisplayOrientation(90);//注意: 该方法实现摄像头90度旋转(摄像头默认是横的)  需2.2及以上版本mCamera.startPreview();} catch (Exception e){// TODO: handle exception}isPreview = true;}}}


要注意,在关闭应用时必须释放摄像头, 否则下次开启时, 由于摄像头被占用, 就会导致程序出错。 其它使用了摄像头的软件也一样。

@Overrideprotected void onPause(){super.onPause();if (mCamera != null){mCamera.release();mCamera = null;}}


更多相关文章

  1. 消除“Unfortunately, System UI has stopped”的方法
  2. android 调用系统相机或者系统相册功能时,onActivityResult方法不
  3. andorid中Html.fromHtml方法
  4. Android调用摄像头识别图片的形状和颜色怎么做
  5. Android禁止横屏竖屏切换的有效方法
  6. 知识梳理:Android子线程中更新UI的3种方法

随机推荐

  1. Android(安卓)开发 及 编译系统
  2. afinal的简单应用(一)
  3. 深入探究Android的WebView下载网络文件的
  4. Android系统集成第三方pre-build库和程序
  5. Android(安卓)动态加载APK--代码安装、获
  6. Android(安卓)Input Framework(二)---Eve
  7. android 内存优化以及性能优化相关问题
  8. Android如何解析Intent Filter
  9. android中shape,selector,layer-list的使用
  10. Android照相机竖屏研究引导