ndroid调用系统相机实现拍照功能 在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题。 虽然之前看过android开发的书,但是没有做过东西,这次也是临时决定让我做一个android采集系统的演示程序。拍照是其中一个功能,让网搜索了下拍照有两种方式,其中一种就是调用系统相机实现拍照功能。 启动照相机进行拍照,代码如下: [java] view plain copy btnCamera.setOnClickListener(new Button.OnClickListener()         {                          public void onClick(View v)             {                 Intent i = new Intent("android.media.action.IMAGE_CAPTURE");                   startActivityForResult(i, Activity.DEFAULT_KEYS_DIALER);               }         });  获取拍照后图片数据,代码如下: [java] view plain copy @Override  protected void onActivityResult(int requestCode, int resultCode,Intent data)   {     switch(resultCode)     {      case RESULT_OK:         super.onActivityResult(requestCode, resultCode, data);          if(data!=null){                 Bundle extras = data.getExtras();                   Bitmap bmp = (Bitmap) extras.get("data");                          ivstorepic.setImageBitmap(bmp);  //设置照片现实在界面上                 hasShootPic = true;//此变量是在提交数据时,验证是否有图片用         }         else         {              hasShootPic = false;         }         break;         default:             break;         }       }  此时,遇到第一个问题,使用miui系统手机拍照时,无法获取到照片数据,使用Log打印数据之后发现Bitmap bmp = (Bitmap) extras.get("data"); 处出现异常。然后搜索了很多资料,问了很多人,都说这个代码没有问题。但是问题还是要解决,后来想是不是可以把数据存放在SDcard上,然后读取SDcard上数据显示在图形空间上。测试之后发现这样可以实现。其中涉及到的变量定义如下: [java] view plain copy public static final String SDCARD_ROOT_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();//路径  public static final String SAVE_PATH_IN_SDCARD = "/bi.data/"; //图片及其他数据保存文件夹  public static final String IMAGE_CAPTURE_NAME = "cameraTmp.png"; //照片名称  public final static int REQUEST_CODE_TAKE_PICTURE = 12;//设置拍照操作的标志

启动相机进行拍照,代码如下: [java] view plain copy btnCamera.setOnClickListener(new Button.OnClickListener(){         public void onClick(View v) {             // TODO Auto-generated method stub              Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                 // 存储卡可用 将照片存储在 sdcard                 if(SimpleFileTool.isHasSdcard()){                             intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(SDCARD_ROOT_PATH+                                 SAVE_PATH_IN_SDCARD,IMAGE_CAPTURE_NAME)));                }                startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);         }         });

获取拍照后图片数据,代码如下: [java] view plain copy @Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {     if (resultCode == RESULT_OK) {         if(requestCode == REQUEST_CODE_TAKE_PICTURE){//拍照返回             //存储卡可用             if(isHasSdcard()){                 getImage(SDCARD_ROOT_PATH+SAVE_PATH_IN_SDCARD+IMAGE_CAPTURE_NAME);             }             else{             //存储卡不可用直接返回缩略图             Bundle extras = data.getExtras();              bitmap = (Bitmap) extras.get("data");             img.setImageBitmap(bitmap);                 img.setVisibility(View.VISIBLE);                 hasShootPic = false;             }                                 }     }     super.onActivityResult(requestCode, resultCode, data);

[java] view plain copy        /** * 检查存储卡是否插入 * @return */  public static boolean isHasSdcard()  {     String status = Environment.getExternalStorageState();     if (status.equals(Environment.MEDIA_MOUNTED)){        return true;     } else {        return false;     }  }

[java] view plain copy    /* 获得图片 图片高度 最大maxH * @param imagePath */  Bitmap bitmap;  int maxH = 200;//  private void getImage(String imagePath){     BitmapFactory.Options options = new BitmapFactory.Options();             options.inJustDecodeBounds = true;             // 获取这个图片的宽和高             bitmap = BitmapFactory.decodeFile(imagePath, options); //此时返回bm为空                 //计算缩放比             int be = (int)(options.outHeight / (float)maxH);             int ys = options.outHeight % maxH;//求余数             float fe = ys / (float)maxH;             if(fe>=0.5)be = be + 1;             if (be <= 0)                 be = 1;             options.inSampleSize = be;                     //重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false             options.inJustDecodeBounds = false;             bitmap=BitmapFactory.decodeFile(imagePath,options);             img.setImageBitmap(bitmap);             img.setVisibility(View.VISIBLE);  }  以上代码,实现功能实际上是直接把图片存储在SDcard内,然后读取数据现实,后面之所以加上一个直接获取数据返回的代码,是为了兼容一些手机。测试了几款手机后发现可正常,使用也算解决了目前遇到的问题。记录下来,备忘。

Android调用系统照相机的更多相关文章

  1. android 调用系统照相机拍照后保存到系统相册,在系统图库中能看到

    需求:  调用系统照相机进行拍照,并且保存到系统相册,调用系统相册的时候能看到   系统相册的路径:String cameraPath= Environment.getExternalStorageD ...

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

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

  3. [android] 调用系统照相机和摄像机

    查看系统照相机源码,找到清单文件查看 查看意图过滤器,action是android.media.action.IMAGE_CAPTURE category是android.intent.categor ...

  4. Android调用系统相机、自己定义相机、处理大图片

    Android调用系统相机和自己定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,而且因为涉及到要把拍到的照片显示出来,该样例也会涉及到Android载入大图片时候的处 ...

  5. Android_照相机Camera_调用系统照相机返回data为空

    本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/16916279 1.调用系统照相机 [java] view plain ...

  6. Android调用系统相机、自定义相机、处理大图片

    Android调用系统相机和自定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理 ...

  7. Android调用系统相册和拍照的Demo

    最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的.确实是,我记得一个月前,我一同学也遇到了这样的问题,在低版本的系统中没问题 ...

  8. Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博

    原文:Android 调用系统分享文字.图片.文件,可直达微信.朋友圈.QQ.QQ空间.微博 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP,如:微信.QQ.微博 ...

  9. [项目总结]关于调用系统照相机Activity被销毁问题解决

    在项目中需要启用系统照相机来拍照.本来很容易的一个问题.但在适配中出现了问题. 简单说一下问题: 有些手机拍照成功,有些手机拍完照后确定返回后activity数据丢失,被销毁了. 问题查找: 经过代码 ...

随机推荐

  1. js小知识归纳(待续)

    1.javascript 中 if (window != top) top.location.href = location.href;的意思 如果当前窗口不是最上层窗口(比如是在Iframe中),那 ...

  2. Query Designer:Condition,根据KeyFigure值来过滤数据

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. ASP.NET MVC Jquery Validate 表单验证的多种方式

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

  4. Node聊天程序实例03:chat.js

    作者:vousiu 出处:http://www.cnblogs.com/vousiu 本实例参考自Mike Cantelon等人的<Node.js in Action>一书. chat.j ...

  5. UML图

    三.说明: 1.类图 第一层显示的是类名,如果是抽象类,就用斜体表示. 第二层是类的特性,通常就是字段和属性. 第三层是类的操作,通常是方法和行为. 注意:'+' 表示 public, '-' 表示 ...

  6. C语言局部变量和全局变量的区别。——Arvin

    局变量是使用相同的内存块在整个类中存储一个值. 全局变量的存在主要有以下一些原因:  1,使用全局变量会占用更多的内存(因为其生命期长),不过在计算机配置很高的今天,这个不成为什么问题,除非使用的是巨 ...

  7. openssl lhash 数据结构哈希表

    哈希表是一种数据结构,通过在记录的存储位置和它的关键字之间建立确定的对应关系,来快速查询表中的数据: openssl lhash.h 为我们提供了哈希表OPENSSL_LHASH 的相关接口,我们可以 ...

  8. DOM操作方法的简单归纳

    (1)要在每个匹配的元素中插入新元素,使用: .append() .appendTo()   .prepend() .prependTo() (2)要在每个匹配的元素相邻的位置上插入新元素,使用: . ...

  9. Jmeter压测环境准备

    Jmeter性能监控 配置好测试机器上的jmeter环境:http://jmeter-plugins.org/downloads/all/ 网站下载两个东西: JMeterPlugins-Standa ...

  10. session和cookie

    第一次听到cookie这个词的时候着实兴奋了一段时间,以为是小饼干呢~快喝一杯82年的java压压惊!哈哈~ 与cookie的第一次邂逅——清缓存和清cookie 刚毕业的时候上班,做二次开发,明明后 ...