一 在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){

Bitmap  bitmap = (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" /> ,但在调用系统提供的拍照功能时并不需要声明!

拍照-----------android系统 至关重要的功能的更多相关文章

  1. [Android 新特性] Android 4.3新功能(正式发布前)

    腾讯数码讯(编译:徐萧梓丞)虽然谷歌公司目前尚未正式对外发布最新的Android 4.3果冻豆操作系统,但是在上周我们已经看到了关于三星正 在为原生版Galaxy S4进行Android 4.3系统进 ...

  2. Android系统截屏的实现(附代码)

    1.背景                     写博客快两年了,写了100+的文章,最火的文章也是大家最关注的就是如何实现android系统截屏.其实我们google android_screen_ ...

  3. Android File Transfer Mac: 如何在 macOS 和 Android 系统之间移动数据

    三大 Mac OS X 系统 Android 文件传输软件 谷歌出品的 Android File Transfer 如何在 Mac 系统上使用 Android File Transfer Androi ...

  4. 文件件监听器,android系统拍照功能调用后删除系统生成的照片

    先说说要实现的功能: android调用系统拍照功能实时 预览 删除 上传 保存 (用户不能再本地文件夹中看到拍的照片) 再说说遇到的问题: 1.调用系统拍照在系统自带的拍照文件夹中生成一张随机命名图 ...

  5. 利用 Android 系统原生 API 实现分享功能

    利用 Android 系统原生 API 实现分享功能 这篇文章提供一个封装好的 Share2 库供大家参考. GitHub 项目地址:Share2 大家知道,要调用 Android 系统内建的分享功能 ...

  6. Android 系统自带图片裁剪功能(适配7.0、8.0、对了还有小米手机)

    前段时间写了如何获取相册和拍照之后的照片并且进行显示和上传,这一次是如何进行圆形图像制作,经常看我写的笔记的人会知道,我很懒.那么我就懒的自定义了,目前需求就用原生的就好了,大神的轮子,我会在后面进行 ...

  7. Android系统拍照源码

    个人对于Android系统拍照的一些总结:一种自定义图片拍照路径 ,另一种直接利用Android拍照后经过处理的缩略图 特别注意第一种方式需要增加SDK读写权限: <uses-permissio ...

  8. [置顶] android系统如何在静音模式下关闭camera拍照声音(2)

    之前写过一篇“android系统如何在静音模式下关闭camera拍照声音”的博客,今天来写他的续篇,继续探讨这个问题. 公司新需求,要求在camera应用中添加一个开关,可以进行拍照声音的关闭和开启. ...

  9. Android系统下app测试功能点

    一.安装卸载 1.验证app能否正常的安装启动运行,安装后的文件夹及文件是否写到了指定的目录里,卸载后相关文件是否清除 2.软件安装/卸载过程中意外情况的处理是否符合需求(如死机,重启,断电) 3.安 ...

随机推荐

  1. 14条Yahoo(雅虎)十四条优化原则【转】

    请大家都能好好学习,不要像我一样一扫而过,好好的记下来!不仅仅是晓得一些CSS xhtml就好了,深刻认识到很多的东西需要学习的.很早就用Firebug,但是却没听说过Yslow,这叫不喜欢追求.希望 ...

  2. hdu-3790最短路径问题

    Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的.   Inp ...

  3. eclipse 编码设置

    eclipse 编码设置 浏览:2840 | 更新:2013-12-31 10:07 一般Java文件编码格式是UTF-8的.以下以默认GBK改为UTF-8为例. 1.改变整个工作空间的编码格式,这样 ...

  4. Apache Ant在Windows下配置环境变量

    Windows下ANT用到的环境变量主要有2个: ANT_HOME 和 PATH. 1..设置ANT_HOME指向ant的安装目录,如下: ANT_HOME = D:\soft\apache\apac ...

  5. vb安装过程中 ntvdm.exe[9696]中发生未处理的win32异常

    最近电脑总是出问题导致我的学习效率很低,前几天在用VB6.0的时候有个知识点不太熟悉,于是按F1发现不会出来帮助文档.突然想到重新装系统之后忘记了安装MSDN帮助插件,就在我安装这个软件的时候发现电脑 ...

  6. js基础例子动态创建table实例

    <style> table{ width:500px; font-weight: bold; border: 1px solid #000; border-collapse:collaps ...

  7. [置顶] Extjs4 异步刷新书的情况下 保持树的展开状态

    前言:首先我觉得搞IT不管你是菜鸟还是特种兵,最重要的品质就是分享知识,因为可能在你这,这点知识不算什么,可是对于像我这样的菜鸟来说,无疑就可能会从中得到一点启发,甚至更大!此段代码,是我在某个网站上 ...

  8. JavaScript新手学习笔记4——我记不住的几个坑:短路逻辑、按值传递、声明提前

    1.短路逻辑 逻辑运算中,如果前一个条件已经可以得出最终结论,则后续所有条件不再执行!这里的逻辑运算指的是逻辑与和逻辑或. 我们要理解逻辑与是两个条件都为真的时候,才为真,如果第一个就是假的,那么后面 ...

  9. 10个利用Eclipse调试Java的常见技巧

    http://www.open-open.com/news/view/1ad9099 阅读目录 1. Conditional Breakpoint 2. Exception Breakpoint 3. ...

  10. 文件下载,带转码-&gt;pdf-&gt;swf

    private String upload = "保存的路径"; //文件下载 public String download() { //初始化 this.initContext( ...