一 在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. java调优随记-堆和栈

    基础知识: 关于堆和栈,堆和栈是程序运行的关键,关于堆和栈的定义和解释可自行搜索,我比较认可以程序运行过程中他们扮演的角色作为对比的点:堆是存储的单位,而栈是程序运行时的单位.栈解决的是程序的运行问题 ...

  2. USENIX 最佳论文奖:擦除 Windows Azure 存储编码

     我们发表了一篇介绍Windows Azure 存储如何用编码方式擦除数据的论文,此论文在 2012 年 6 月的 USENIX 技术年会上荣获最佳论文奖.这是 MicrosoftResearch ...

  3. cocos2d-x 找不到资源文件问题

    问题描述: 在项目中引用到了图片,但是运行时报错: Unhandled exception at 0x001049DE in hello.exe: 0xC0000005: Access violati ...

  4. DPDK2.1 linux上开发入门手册

    1引言 本文档主要包含INTEL DPDK安装和配置说明.目的是让用户快速的开发和运行程序.文档描述了如何在不深入细节的情况下在linux应用开发环境上编译和运行一个DPDK应用程序. 1.1文档总览 ...

  5. Beanstalkd(ubuntu安装)

    安装Beanstalkd # apt-get install beanstalkd Unubtu 开启beanstalkd的持久化选项 #vim  /etc/default/beanstalkd 把S ...

  6. css和js引用图片的路径问题

    原文转自:http://www.cnblogs.com/azumia/archive/2012/06/17/2552346.html 在JS文件中书写相对路径:JS文件是指在页面中引用的外部JavaS ...

  7. MySQL删除外键定义的方法

    MySQL外键在定以后,如果我们不再需要这个外键,可以进行删除操作,下面就为您介绍MySQL删除外键定义的方法,供您参考. 不知道大家有没有发现,在定义外键的时候articles.member_id外 ...

  8. String 和 InputStream 互转方式

    /** * 利用BufferedReader实现Inputstream转换成String <功能详细描述> * * @param in * @return String */ public ...

  9. 使用boost中的线程池

      #include <boost/thread/thread.hpp>#include <boost/bind.hpp>#include <iostream> u ...

  10. MySQL加密的性能测试

    这是对MySQL进行加密性能测试的两篇文章系列之二.在第一篇中,我专门使用MySQL的内置的对SSL的支持来 做压力测试,产生了一些令人惊讶的结果. AD:WOT2015 互联网运维与开发者大会 热销 ...