一 在Android 中,拍照对应的Action 是android.provider.MediaStore.ACTION_IMAGE_CAPTURE. 用于拍照的Activity 需要返回照片图像数据,

摄像对应的Action 是android.provider.MediaStore.ACTION_VIDEO_CAPTURE

因此需要使用startActivityForResult()来启动 Activity .代码如下:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(intent,1);

截获 Activity 返回的图像数据的事件方法是onActivityResult ,代码如下:

protected void onActivityResult(int requestCode, int resultCode, Intent data){

if(requestCode == 1){

if(resultCode == Activity.RESULT_OK){

Bitmapbitmap = (Bitmap)data.getExtras().get("data"); //拍照 Activity 保存图像数据的 key 是 data,返回的数据类型是 Bitmap 对象

imageView.setImageBitmap(bitmap); // 在 ImageView 组件中显示拍摄的照片

}

}

super.onActivityResult(requestCode, resultCode, data);

}

系统拍照功能 具体代码请参见ch14_systemcamera工程

注意: 使用系统的拍照 通常很难拍摄大辨率的照片,但可以生成分辨率更小的照片.通过insertImage 方法可以同时在 /sdcard/DCIM/.thumbnails 和 /sdcard/DCIM/Camera 目录中分别生成分辨率为 50 X 50 和 208 X 312的图像, 代码如下:

MediaStore.Images.Media.insertImage(getContentResolver(), cameraBitmap,null,null);

其中 cameraBitmap 是拍照 Activity 返回的 Bitmap对象

二 实现用户自定义拍照 Activity

拍照的核心类是 android.hardware.Camera,通过Camera类的静态 open 可以获得Camera对象,并通过Camera 类的startPreview 方法开始拍照,最后通过Camera 类的takePicture 方法结束拍照,并在相应的事件中处理照片数据

具体步骤如下:

1 指定用于显示拍照过程影像的容器,通常是SurfaceHolder 对象。

2 在拍照过程中涉及到一些状态的变化: 这些状态包括开始拍照(对应surfaceCreated 事件方法);拍照状态变化(对应surfaceChanged 事件方法); 结束拍照(对应surfaceDestroyed 事 件 方法)。这3个方法都是在SurfaceHolder.Callback 接口中定义的, 因此,需要使用SurfaceHolder 接口的addCallback 方法指定 SurfaceHolder.Callback 对象,以便实现这3种方法

3 拍完照后需要处理照片数据。处理这些数据的工作需要在PictrueCallback 接口的onPictureTaken方法中完成。当调用Camera 类的takePicture 方法后,onPictureTaken 方法被调 用.

4 如果需要自动对焦,需要调用Camera 类的 autoFocus 方法.该方法需要一个 AutoFocusCallback 类型的参数值. AutoFocusCallback 是一个接口,在该接口中定义了一个onAutoFocus 方法,当摄像头正在对焦或对焦成功都会调用该方法.

具体代码请参见ch14_camera工程

特别注意: 用户自定义的拍照功能必须声明权限 <uses-permission android:name="android.permission.CAMERA" /> ,但在调用系统提供的拍照功能时并不需要声明

http://blog.csdn.net/aduovip/article/details/6776765

更多相关文章

  1. Android心得8--Internet
  2. android adapter的更新
  3. android 权限集合
  4. Android程序全屏方法
  5. Android(安卓)webView自适应屏幕
  6. [Android]Recovery调用外部Shell脚本,Shell脚本使用ui_print方法
  7. Android(安卓)Wi-Fi Firmware(wcnss)修改方法(以QCOM为平台)
  8. 【Android(安卓)开发教程】DialogFragment
  9. Android倒计时之 CountDownTimer

随机推荐

  1. Android Studio NDK及so文件开发 以及常
  2. Android中AppWidget加载流程(一)
  3. 自己祝贺一下访问量突破10000,发几个andro
  4. Android Binder机制 - interface_cast和a
  5. 如何申请 android google map API key
  6. Android的三种网络通信方式
  7. Android 之 ServiceManager与服务管理
  8. Android Framework启动过程(android内核剖
  9. android asmack解决连接ejabberd的问题
  10. Android(安卓)BLE基础框架使用详解