前言

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

更多相关文章

  1. EditText焦点控制及软键盘的隐藏显示
  2. Android系统权限和root权限的获取以及应用权限列表
  3. 获取listview checkbox选择的值 android
  4. Android(安卓)NDK开发之旅34--FFmpeg音频解码
  5. Android(安卓)Annotations框架 配置及使用(Windows 7 + Android(
  6. android调用系统相机拍摄多张照片
  7. Android之Bitmap高效缓存以及android缓存策略
  8. android 获取文件大小
  9. Android中APP、AMS、WMS的Binder IPC

随机推荐

  1. Android不同版本获取当前wifi信息方法
  2. Android(安卓)关于休眠的几个坑点
  3. Android之Intent分析
  4. Android(安卓)Studio下jni应用
  5. [深度报道]Android国内开发者陷盈利困局
  6. drawRoundRect方法:绘制圆角矩形
  7. Vue3使用Proxy实现数据监听的原因分析
  8. element ui表格实现下拉筛选功能
  9. OpenHarmony-RK3568开发板操作梳理
  10. 实例演示属性与方法重载、 实例演示命名