拍照-----------android系统 至关重要的功能

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

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

拍照-----------android系统 至关重要的功能,布布扣,bubuko.com

时间: 2024-11-03 03:44:44

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

Android系统截屏功能提取

Android在4.0版本之后同时按电源键和音量键可以截取当前屏幕,截图后会有一个过渡动画效果,这里提取了将效果这部分提取出来,可以用于应用截图分享功能. 截图功能在源码中的位置是com.android.systemui.screenshot,下面有四个类 其中主要工作都在GlobalScreenshot中,包括截图后的动画效果.保存到本地和显示到通知栏.为了简单,下面的代码只保留了过渡动画部分 class GlobalScreenshot { private static final Stri

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

腾讯数码讯(编译:徐萧梓丞)虽然谷歌公司目前尚未正式对外发布最新的Android 4.3果冻豆操作系统,但是在上周我们已经看到了关于三星正 在为原生版Galaxy S4进行Android 4.3系统进行测试的消息.虽然Android 4.3本身看起来并没有令人非常重大的升级,但是谷歌公司已经开始对旗下包括Gmail.日历.键盘.游戏服务等众多应用进行升级以支持即将到来的 Android 4.3操作系统. 到目前为止,已经对外确认的Android 4.3新特性包括以下几点: Wi-Fi后台自动搜索

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

1.背景 写博客快两年了,写了100+的文章,最火的文章也是大家最关注的就是如何实现android系统截屏.其实我们google android_screen_shot就会找到很对办法,但那些都是很多年前的了,在android4.*版本后,android对于源码进行了更正,使得以前的方法都不能够使用. 感谢cjd6568358这名网友,我们一起讨论,最终由他实现了android系统截屏功能,为了让以后想要这个功能的coder可以少走一些弯路,我们整理的代码做成开源项目. 2.思路 其实主要思路还

调用 android 系统拍照结合 android-crop 裁剪图片

在一个应用中更换用户的头像,一般有拍照和从图库中选择照片两种方法,现在网上也有很多开源的,但是很多都太复杂.而 Android-crop 这个库比较小,代码不复杂,比较适合,但是它没有拍照这个功能,需要我们自己整合进去. 调用系统相机拍照 返回略缩图的拍照 // 调用系统的拍照 private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTU

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

利用 Android 系统原生 API 实现分享功能 这篇文章提供一个封装好的 Share2 库供大家参考. GitHub 项目地址:Share2 大家知道,要调用 Android 系统内建的分享功能,主要有三步流程: 创建一个 Intent ,指定其 Action 为 Intent.ACTION_SEND,表示要创建一个发送指定内容的隐式意图. 然后指定需要发送的内容和类型,设置分享的文本内容或文件的Uri,以及文件的类型,便于是支持该类型内容的应用打开. 最后向系统发送隐式意图,开启系统分享

Android系统下载管理DownloadManager功能介绍及使用示例

http://www.trinea.cn/android/android-downloadmanager/ 本文主要结合源码介绍Android系统下载管理DownloadManager的强大功能及使用.这是许久来准备写的一系列博客,这篇主要介绍DownloadManager的功能和示例,后面还有两篇会介绍下载管理的底层设计(DownloadProvider.DownloadManager.DownloadManagerUI).下载管理如何进行功能增强和bug修改. 示例APK可从这些地址下载:G

Android系统自带分享功能的实现(可同时分享文字和图片)

 /** * 分享功能 * * @param context * 上下文 * @param activityTitle * Activity的名字 * @param msgTitle * 消息标题 * @param msgText * 消息内容 * @param imgPath * 图片路径,不分享图片则传null */ public void shareMsg(String activityTitle, String msgTitle, String msgText, String img

Android系统拍照源码

个人对于Android系统拍照的一些总结:一种自定义图片拍照路径 ,另一种直接利用Android拍照后经过处理的缩略图 特别注意第一种方式需要增加SDK读写权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 下面直接上源码 1 package com.example.camerademo; 2 3 import java.io.File; 4 import java.

调用android系统相机拍照并保存图片

android调用系统相机拍照并保存图片 调用系统相机: //在某个事件中添加如下代码即可,不是说单击事件都不会写啊startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE),1); 解释:其中参数MediaStore.ACTION_IMAGE_CAPTURE是调用系统相机用的,而后面的1则是请求的Activity的标志,用来处理返回结果的 可以理解为:给系统相机的Activity添加一个请求标志,在用onActivity