1.Android调用摄像头

来源:互联网 发布:html调用外部js文件 编辑:程序博客网 时间:2024/05/22 04:28

详细文章请参见:http://www.cnblogs.com/over140/archive/2011/11/16/2251344.html


实现Android调用摄像头主要分成两个类来实现:CameraPreview类 和 MainActivity类


CameraPreview类:

package com.example.open_camera;import android.content.Context;import android.hardware.Camera;import android.view.SurfaceHolder;import android.view.SurfaceView;/* * 本类主要功能: * 继承SurfaceView类,并实现SurfaceHolder.Callback接口 *  */public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{public SurfaceHolder mHolder;public Camera mCamera;/* * 本方法是构造方法 * 获取系统摄像头对象,及系统上下文 *  */public CameraPreview(Context context, Camera camera){// TODO 自动生成的构造函数存根super(context);mCamera = camera;//安装一个SurfaceHolder.Callback,        // 这样创建和销毁底层surface时能够获得通知。mHolder = this.getHolder();mHolder.addCallback(this);//摄像头界面旋转180度mCamera.setDisplayOrientation(180);}/** * @param args */public static void main(String[] args){// TODO 自动生成的方法存根}/* * 本方法功能: * 创建SurfaceHolder时调用 */@Overridepublic void surfaceCreated(SurfaceHolder holder){// TODO 自动生成的方法存根try{//设置Camera的预览显示mCamera.setPreviewDisplay(holder);//摄像头开始预览mCamera.startPreview();}catch(Exception e){}}/* * 本方法功能: * 改变SurfaceHolder时调用 */@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height){// TODO 自动生成的方法存根}/* * 本方法功能: * 销毁SurfaceHolder时调用 */@Overridepublic void surfaceDestroyed(SurfaceHolder holder){// TODO 自动生成的方法存根if(mCamera != null){//释放摄像头资源mCamera.release();mCamera = null;}}}

MainActivity类:


package com.example.open_camera;import android.app.Activity;import android.content.Context;import android.content.pm.PackageManager;import android.hardware.Camera;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.FrameLayout;import android.widget.TextView;/* * 本类是主界面类 */public class MainActivity extends Activity implements OnClickListener{Button btn_1;private Camera mCamera;private CameraPreview mPreview;int btn_flag = 0;FrameLayout frameLayout;@Overrideprotected void onCreate(Bundle savedInstanceState){// TODO 自动生成的方法存根super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*TextView设置*/TextView tv = (TextView) findViewById(R.id.text_1);//检查设备是否有摄像头,并设置相应的文本信息if(checkCameraHardware(getBaseContext())){tv.setText("CAMERA IS READY".toCharArray(), 0, "CAMERA IS READY".length());}else{tv.setText("CAMERA NOT READY".toCharArray(), 0, "CAMERA NOT READY".length());}/*Button设置*/btn_1 = (Button) findViewById(R.id.btn_1);// 创建Camera实例mCamera = getCameraInstance();//将FrameLayout绑定至frameLayoutframeLayout = (FrameLayout) findViewById(R.id.camera_preview);//设置摄像头预览mPreview = new CameraPreview(MainActivity.this, mCamera);//设置button 的点击监听事件btn_1.setOnClickListener(this);}//TextView:检查系统是否存在摄像头。如果存在,则返回true;否则,返回falseprivate boolean checkCameraHardware(Context context){if(context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){return true;}else{return false;}}//FrameLayout:获取摄像头实例public static Camera getCameraInstance(){Camera c = null;try{c = Camera.open();}catch(Exception e){Log.e("Error", "getCameraInstance");}return c;}//Button:重写onClick方法@Overridepublic void onClick(View v){// TODO 自动生成的方法存根switch(btn_flag){//当btn_flag = 0 时,摄像头为打开状态,此时,button上应显示CAMERA STOPcase 0:{//设置button显示的文本内容为CAMERA STOPbtn_1.setText("CAMERA STOP".toCharArray(), 0, "CAMERA STOP".length());//在FrameLayout中添加摄像头预览CameraPreviewframeLayout.addView(mPreview);//将 button 标志位 btn_flag 设为 1btn_flag = 1;break;}//当btn_flag = 1 时,摄像头为关闭状态,此时,button上应显示CAMERA STARTcase 1:{//设置button显示的文本内容为CAMERA STARTbtn_1.setText("CAMERA START".toCharArray(), 0, "CAMERA START".length());//移除摄像头预览CameraPreviewframeLayout.removeViews(0, 1);// 再次创建Camera实例mCamera = getCameraInstance();//将FrameLayout绑定至frameLayoutframeLayout = (FrameLayout) findViewById(R.id.camera_preview);//设置摄像头预览mPreview = new CameraPreview(MainActivity.this, mCamera);//将button标志位btn_flag置为0btn_flag = 0;break;}}}//Activity:Stop状态@Overrideprotected void onStop(){// TODO 自动生成的方法存根super.onStop();//Activity的状态是stop时,则销毁mPreview资源mPreview.surfaceDestroyed(mPreview.getHolder());}}

工程源代码下载:http://download.csdn.net/detail/u014129816/8030035

0 0
原创粉丝点击