本文介绍了Android开发实现摄像头功能的方法。分享给大家,供大家参考,详情如下:

分析:

1)判断是否有摄像头 checkCameraHardware(this)
2) 获取相机camera = www.sxzhongrui.com(0);
3) 添加相机 mPreView = new SurfacePreView(this,mCamera);
4)实现mCamera.autoFocus拍照
5)拍照后,使用mCamera.takePicture(null,null,mPicture);将图片保存到sd卡的方法

代码实现:

/**
 * 使用相机拍照
 * @作者陈.lin
 *
 */
公共类 CameraActivity 扩展 Activity {
  私有相机 mCamera;//相机
  private SurfacePreView mPreView;//视图
  私有FrameLayout mFrameLayout;
  @覆盖
  protected void onCreate(Bundle savingInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_camera_takephoto);
    mFrameLayout = (FrameLayout) findViewById(R.id.framelayout);
    如果(检查相机硬件(这个)){
      mCamera = getCamera();
      mPreView = new SurfacePreView(this,mCamera);
      mFrameLayout.addView(mPreView);
    }
  }
  /**
   * 专注于拍照
   * @参数视图
   */公共无效拍照(查看视图){
    mCamera.autoFocus(new AutoFocusCallback() {
      @覆盖
      公共无效onAutoFocus(布尔成功,相机相机){
        mCamera.takePicture(null,mPicture);
      }
    });
  }
  /**
   * 拍摄后的图片保存
   */
  私有 PictureCallback mPicture = new PictureCallback() {
    @覆盖
    公共无效onPictureTaken(字节[]数据,相机相机){
      尝试 {
        文件 file = new File("/sdcard/file/aa.jpg");
        if (!file.exists()) {
          文件.mkdirs();
        }
        FileOutputStream fos = new FileOutputStream(文件);
        fos.write(数据);
        fos.close();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  };
  /**
   * 判断相机是否存在
   * @参数上下文
   * @返回
   */
  私人布尔检查相机硬件(上下文上下文){if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
      返回真;
    }
    返回假;
  }
  /**
   * 初始化相机
   * @返回
   */
  公共静态相机 getCamera(){
    相机camera = null;
    尝试 {
      相机 = www.sxzhongrui.com(0);
    } catch (异常 e) {
      e.printStackTrace();
    }
    返回相机;
  }
  /**
   * 实现拍摄视图
   */
  @SuppressWarnings(“弃用”)
  私有类 SurfacePreView 扩展 SurfaceView 实现 SurfaceHolder.Callback{
    私人相机mCamera;
    私人SurfaceHolder mHolder;
    公共SurfacePreView(上下文上下文,相机相机){
      超级(上下文);
      mCamera = 相机;
      mHolder = getHolder();
      mHolder.addCallback(this);
      mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }
    @覆盖
    公共无效surfaceCreated(SurfaceHolder持有者){
      尝试 {
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();} catch (IOException e) {
        e.printStackTrace();
      }
    }
    @覆盖
    公共无效surfaceChanged(SurfaceHolder持有者,int格式,int宽度,int高度){
      if (holder.getSurface() == null) {
        返回;
      }
      尝试 {
        mCamera.stopPreview();
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    @覆盖
    公共无效surfaceDestroyed(SurfaceHolder持有者){
      //
      mCamera = null;
    }
  }
}

布局:


<线性布局 xmlns:android =“http://www.sxzhongrui.com/apk/res/android”
  安卓:layout_width =“match_parent”
  安卓:layout_height =“match_parent”
  android:orientation="垂直" >
  <框架布局
    android:id="@+id/framelayout"
    安卓:layout_width =“wrap_content”
    安卓:layout_height =“0dp”
    安卓:layout_weight =“1”>
  
  <按钮android:id="@+id/button1"
    安卓:layout_width =“wrap_content”
    安卓:layout_height =“wrap_content”
    android:onclick="拍照"
    android:text="照片"/>


对更多Android相关内容感兴趣的读者可以查看本站专题:《Android拍照与图片处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题

解决方法

汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》和《Android控件用法总结》

希望这篇文章对大家Android编程有所帮助。

以上就是来客网为您收集的Android开发方法实现相机功能实例分析的全部内容。希望本文能够帮助您解决Android开发实现摄像头功能的方法实例分析中遇到的程序开发问题。

如果您觉得来客网的内容不错,欢迎您向您的程序员朋友推荐来客网。