Android调用系统照相机
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调用系统照相机的更多相关文章
- android 调用系统照相机拍照后保存到系统相册,在系统图库中能看到
需求: 调用系统照相机进行拍照,并且保存到系统相册,调用系统相册的时候能看到 系统相册的路径:String cameraPath= Environment.getExternalStorageD ...
- Android 调用系统照相机拍照和录像
本文实现android系统照相机的调用来拍照 项目的布局相当简单,只有一个Button: <RelativeLayout xmlns:android="http://schemas.a ...
- [android] 调用系统照相机和摄像机
查看系统照相机源码,找到清单文件查看 查看意图过滤器,action是android.media.action.IMAGE_CAPTURE category是android.intent.categor ...
- Android调用系统相机、自己定义相机、处理大图片
Android调用系统相机和自己定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,而且因为涉及到要把拍到的照片显示出来,该样例也会涉及到Android载入大图片时候的处 ...
- Android_照相机Camera_调用系统照相机返回data为空
本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/16916279 1.调用系统照相机 [java] view plain ...
- Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理 ...
- Android调用系统相册和拍照的Demo
最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的.确实是,我记得一个月前,我一同学也遇到了这样的问题,在低版本的系统中没问题 ...
- Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博
原文:Android 调用系统分享文字.图片.文件,可直达微信.朋友圈.QQ.QQ空间.微博 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP,如:微信.QQ.微博 ...
- [项目总结]关于调用系统照相机Activity被销毁问题解决
在项目中需要启用系统照相机来拍照.本来很容易的一个问题.但在适配中出现了问题. 简单说一下问题: 有些手机拍照成功,有些手机拍完照后确定返回后activity数据丢失,被销毁了. 问题查找: 经过代码 ...
随机推荐
- Xcode8.0 去除控制台多余打印
选择Product->Scheme->Edit Scheme ...或者直接按 command + shift + < 快捷键,在弹出的窗口中Environment Variable ...
- Android 录音器
Android自带的mediarecoder录音器不含pause暂停功能,解决方法:录制多个音频片段,最后合成一个文件. 参照 : http://blog.csdn.net/a601445984/ar ...
- 解决Spark读取Hive分区表出现Input path does not exist的问题
假设这里出错的表为test表. 现象 Hive读取正常,不会报错,Spark读取就会出现: org.apache.hadoop.mapred.InvalidInputException: Input ...
- 系统hosts文件的作用
host是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会 ...
- 1000【入门】熟悉一下Online Judge的环境
var a,b:longint; begin read(a,b); writeln(a+b); end. #include <stdio.h> int main() { int a,b; ...
- Solr内置的字段类型
字段类型在org.apache.solr.schema包下 Class 描述 BCDIntField 二进制整形字段 BCDLongField 二进制长整形字段 BCDStrField 二进制字符型字 ...
- nignx 负载均衡的几种算法介绍
负载均衡,集群必须要掌握,下面介绍的负载均衡的几种算法. 1 .轮询,即所有的请求被一次分发的服务器上,每台服务器处理请求都相同,适合于计算机硬件相同. 2.加权轮询,高的服务器分发更多的请求 ...
- JavaScript中的数组遍历forEach()与map()方法以及兼容写法
原理: 高级浏览器支持forEach方法 语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: forEach:用来遍历数组中的每一项:这个方法执行是 ...
- setTimeout和setInterval的区别以及如何写出效率高的倒计时
1.setTimeout和setInterval都属于js中的定时器,可以规定延迟时间再执行某个操作,不同的是setTimeout在规定时间后执行完某个操作就停止了,而setInterval则可以一直 ...
- contiki-断点的保存和恢复
保存断点 保存断点是通过保存行数来完成的,在被中断的地方插入编译器关键字_LINE_,编译器便自动记录所终端的行数.展开那些具有中断功能的宏,可以发现最后保存行数是宏LC_SET,取宏PROCESS_ ...