前言

Android在设计架构的时候,采用了mashup(混搭)的设计理念,也就是说一切都是组建,自己写的是组件,别人提供的也是组件,使用的时候只要符合相关协议就可以把他们当作自己的组件。比如系统提供的照相机、通讯录等等都可以直接拿来用。今天就看下照相机的相关内容。

简单调用照相机

如果我们的需求只是直接调用照相机,而不用做任何后续处理,那么这个就很简单了,通过传递一个intent对象,就可以直接调用照相机组件,如下所示:  

Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mContext.startActivity(intent);

这样我们就把照相机组件给调出来了,然后就正常使用照相机就可以了。

获取照相机的内容

上一节我们简单的使用了照相机,同时照下来的内容存储到了默认路径中了,但是更多的时候我们不仅需要调用照相机进行拍照,同时还需做后续处理,
比如把照下来的内容放到我们指定的内容区域中,这样的需求就稍微麻烦一点。这时候调用照相机的时候就需要启动一个带有返回值的照相机Activity,
然后在接收接口中处理返回照片,如下所示:
    调用代码

Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
activity.startActivityForResult(intent,1);

通过上面的代码就启动了一个带返回值的照相机Activity,完成照相后会调用返回接口,我们处理照片内容就在这个接口里面了。如下所示
   返回代码

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1:
//获取照片
Bundle extras = data.getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");
break; default:
break;
} }

通过上面的代码我们就可以获取到照相机拍下来的内容了,是一个Bitmap对象,然后就可以使用这个对象,用这个对象时候我们发现这张照片并不是原始照片,而是经过压缩后的照片,如果能满足我们的需求那就ok了,如果我们需要获取到原始照片,就需要用到下面的内容了

获取原始照片

如果想获取原始照片,那么在传递intent对象的时候就需要进行进一步的设置了,需要把指定原始照片保存到指定路径,如下所示

    File file = new File("/sdcard/demo/temp");
if(!file.exists()){
file.mkdirs();
} File imgFile = new File(tempDir,"test"); Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Uri u=Uri.fromFile(imgFile);
//指定路径那个
intent.putExtra(MediaStore.EXTRA_OUTPUT, u);

这样调用代码就写好了,照相机会把原始照片输出到/sdcard/demo/temp/test文件中

使用原始照片

  这就很简单了,知道了路径我们可以通过各种方式来访问并处理它,下面是其中的一种方式。

     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1:
//获取照片
Uri uri = data.getData(); //获取到是图片路径
ContentResolver cr = this.getContentResolver();
Bitmap bitmap=null;
try {
bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); } catch (FileNotFoundException e) {
e.printStackTrace();
}
break;
default:
break;
}

这样我们有拿到了这个bitmap,后续就随意使用了。

后记

这篇文章简单介绍了下照相机的使用情况,当然还可以自定义照相机界面来完成,等等吧,相信有了这篇文章的简单介绍会有一个大概的轮廓,至于
    使用到什么程度还需要看具体需求,然后根据api进行进一步的定制。
    Uri:统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。它可以标识各种类型的资源,比如我们常见的http资源,以及ftp资源,在这篇文章中是表示一个路径资源。

原文地址:http://www.cnblogs.com/luoaz/p/4148851.html

Android照相机应用的更多相关文章

  1. Android照相机模块编程 照片颠倒问题及查询摄像头参数问题的解决

    这两天编程弄Android照相机模块,设置好各种参数后,发现预览的时候,照片是颠倒了,不是上下颠倒而是颠倒90°. 我的手机是华为U9200,用的Android4.0.3,后来看到http://www ...

  2. Android基础知识复习之打开照相机拍照并获取照片

    对于我来说,做一件事情: 首先要理清我的思路,我要打开照相机,我能想到的是:在Android中我要打开系统应用,肯定需要一个隐式意图,那就要查询Android照相机的源码,查看并找到意图过滤器的书写方 ...

  3. 【Mood-12】Android开发相关书籍推荐

    新年伊始,找到Android进阶干货若干,2015拜读. 1.Android应用UI设计模式 目前,谷歌Android操作系统在移动市场中风头正劲,并且未来发展势不可挡.<Android应用UI ...

  4. Android调用系统照相机

    ndroid调用系统相机实现拍照功能 在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题. 虽然之前看过android开发的书,但是没 ...

  5. Android 调用系统照相机拍照和录像

    本文实现android系统照相机的调用来拍照 项目的布局相当简单,只有一个Button: <RelativeLayout xmlns:android="http://schemas.a ...

  6. delphi xe5 android 调用照相机获取拍的照片

    本篇文章我们来看一下delphi xe5 在android程序里怎样启动照相机并获取所拍的照片,本代码取自xe自带打sample,路径为: C:\Users\Public\Documents\RAD ...

  7. Android平台之不预览获取照相机预览数据帧及精确时间截

    在android平台上要获取预览数据帧是一件极其容易的事儿,但要获取每帧数据对应的时间截并不那么容易,网络上关于这方面的资料也比较少.之所以要获取时间截,是因为某些情况下需要加入精确时间轴才能解决问题 ...

  8. Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)

    Android自定义照相机实现 近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难,下面就是 ...

  9. Android摄像头照相机技术-android学习之旅(八)

    简介 Android SDK支持Android设备内置的照相机.从Android2.3开始支持多个摄像头(主要指前置摄像头和后置摄像头).通过照片相可以拍照和录像. 需要考虑的问题 是否支持照相机 快 ...

随机推荐

  1. 软件开发过程文档-cgaowei

    鸡肋——食之无味,弃之可惜”,软件开发过程文档遭遇了鸡肋一样的境遇. 目前敏捷软件开发过程非常流行.相对于软件开发过程文档,敏捷软件开发过程更加重视可运行的程序.关于软件开发过程文档,两个极端都是不可 ...

  2. gomoblie flappy 源码分析:图片素材和大小的处理

    flappy的源码可以在 https://github.com/golang/mobile 看到.具体在 https://github.com/golang/mobile/tree/master/ex ...

  3. Net文章汇总帖

    DevExpress:Data Grid ExamplesHow to: Initialize Cells in Newly Created RowsHow to: Set a Cell Value ...

  4. Mingyang.net:org.springframework.context.annotation.ConflictingBeanDefinitionException

    org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean ...

  5. 【转】nginx配置location总结及rewrite规则写法

    原文:http://seanlook.com/2015/05/17/nginx-location-rewrite/ 1. location正则写法 location = / { # 精确匹配 / ,主 ...

  6. AIX配置时间服务器(NTP)

    xntpd是关于网络时间协议的守护进程,它遵循了因特网时间服务器的通用标准.在启动 xntpd 时, xntpd 会读取 /etc/ntp.conf 配置文件来确定网络中系统时钟服务器,以 ntp 服 ...

  7. JAVA设计模式之单一职责原则

    概念: 就一个类而言应该只有一个因其他变化的原因. 流程: 问题由来:设类或接口类C负责两个不同不同的职责:职责T1,职责T2.当由于职责T1需求改变进而需要修改类C时,可能导致职责T2收到不可预知的 ...

  8. IOS开发-phonegap及免证书及真机调试

    回头补记(Last edited at 2015.5.24). 第一步:建立项目 参见:Xcode5 + phoneGap2.9搭建ios开发环境 下载phonegap2.9.1,解压. 命令行,进入 ...

  9. Win2008远程多用户登陆的配置方法 另附详细设置: Windows server 2008 R2实现多用户远程连接

    Win2008远程多用户登陆的配置方法     在使用Windows 2008远程登录功能时,如果需要进行多用户登录,可以采用以下配置方法: 首先要启用远程桌面这一功能:右击“我的电脑”→ 属性 → ...

  10. JAVA中求解对象所占字节大小

    该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口 接口1:计算对象在内存中所占字节数 接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象:返回一个新的对象, ...