文档章节

Android 调用系统拍照 笔记

会说话的哑巴
 会说话的哑巴
发布于 2012/09/07 15:01
字数 631
阅读 3252
收藏 7
点赞 0
评论 0

    由于临时需要做个简单的Android程序,其中涉及调用系统拍照并保存照片。之前没有任何Java和Android经验,coding中遇到不少问题,特记录以供参考。

    Google一下能找到不少现成的调用系统拍照的代码,可弄了一天也没成功。测试手机为Defy,系统是Android4.0/MIUI-1.11-9。先附上网上搜所的代码,后说明遇到的问题:

    1.响应按钮点击事件,调用系统拍照,其中RESULT_CAPTURE_IMAGE为自定义拍照标志。

public void onClick(View v) {
    startActivityForResult(new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE,RESULT_CAPTURE_IMAGE);
}

     2.Override onActivityResult(int requestCode, int resultCode, Intent data)方法,在此方法中保存图片。其中imagePath在此类中已定义,操作sdcard权限在清单文件中已添加,判断sdcard是否存在以及指定文件目录是否存在在此之前都已做处理。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == RESULT_CAPTURE_IMAGE) {
        if(resultCode == RESULT_OK) {
            File file = new File(imagePath);
            Bitmap bitmap = (Bitmap)data.getExtras().get("data");
            try {
                BufferOutputStream bos = new BufferOutputStream(new FileOutputStream(file));
                //采用压缩转档方法
                bitmap.compress(Bitmap.CompressFormat.JPEG,80,bos);
                bos.flush();
                bos.close();
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
}

    用以上代码碰到的问题:

  1. 在MIUI下无法取到照片数据,跟踪发现data.getExtras()为空,之后使用BitmapFactory.decodeFile()方法解决;    
  2. 手机上测试没有保存图片,跟踪发现data为null,继续Google,找到以下代码

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Uri uri = Uri.fromFile(new File(imagePath));
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
startActivityForResult(intent,RESULT_CAPTURE_IMAGE);

    将按钮onClick方法中采用以上代码,调用系统拍照并确定之后,无法返回程序Activity。继续Google,终于找到解决办法,代码如下(在 if(resultCode == RESULT_OK)里面)

Bitmap bitmap = null;
File file = new File(imagePath);
bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
if(bitmap == null) {
     Toast.makeText(this,R.string.image_save_error,Toast.LENGTH_LONG).show();
}
try {
    BufferOutputStream bos = new BufferOutputStream(new FileOutputStream(file));
    bitmap.compress(Bitmap.CompressFormat.JPEG,80,bos);
    bos.flush();
    bos.close();
}catch(FileNotFoundException e) {
    e.printStackTrace();
}catch(IOException e) {
    e.printStackTrace();
}
super.onActivityResult(requestCode,resultCode,data);

   重新编译后, 在机器上测试通过。其中主要参考链接为 android调用系统相机拍照 获取原因 以及 android调用系统相机实现拍照功能;其中获取原因一文中的代码

Uri u = 
 Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), 
   f.getAbsolutePath(), null, null));

进过跟踪发现图片路径解析错误,最后直接使用了

bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());

来获取bitmap值。

    第一次写android程序,对整个开发环境,开发语言以及Android API很不熟悉,花费了不少时间。以上文字感觉非常凌乱,代码也只在一款机器上经过测试,希望能给自己和别人有所帮助。

© 著作权归作者所有

共有 人打赏支持
会说话的哑巴
粉丝 1
博文 3
码字总数 1592
作品 0
长沙
程序员
拍照PhotoIntentActivity总结

拍照PhotoIntentActivity总结 项目地址:http://developer.android.com/training/camera/photobasics.html 1 低版本使用高版本的api 1.1 起因 比如在gradle配置文件里: 再看getExternalStor...

neumeng
2015/04/17
0
0
Android上使用camera拍照,把获取的照片上传到远程服务器

参考原文: Take a Photo from Android Camera and Upload it to a Remote PHP Server 使用Java上传文件 从Apache Software Foundation下载HttpClient 4.3.4。 在工程中添加下面的jar包: 参......

yushulx
2014/08/11
0
0
关于调用Android照相功能获取图片

最近在项目中调用相机,使用了别人写好的文件,但发现获取的照片没真正使用系统照相拍照再查看那么清晰,于是研究了一下,发现通常调用照相功能获取的图片都是被压缩的,如果要获取原照,那得...

tyronejw
2015/08/18
0
0
Android Camera 架构简析1

前言 最近整体看了一下Android Camera 部分代码,从Framework的Camera 应用框架到 Hardware的Camera HAL 再到 Kernel的 Camera Driver。把对Camera部分的学习整理成笔记,方便理解。 2. 概述...

Jerikc
2012/09/03
0
0
项目需求讨论 - WebView下拍照及图片选择功能

前言: 如果觉得掘金上看图片放大看不清楚,可以跳到另外的同步发布的链接看,放大图片下部有个可以查看原图功能,很清楚:项目需求讨论 - WebView下拍照及图片选择功能 现在很多app里面,都...

青蛙要fly
06/23
0
0
JB4.2:添加一个SwithButton控制ShutterSound

在Andoird JB 4.2中,Camera的代码有非常大的变动,不管是frameworks,还是APP。逻辑更加严谨,google里的程序员真的很喜欢用设计模式,到处都可以看到设计模式的影子,刚刚拿到JB4.2源码的时...

Jerikc
2013/03/11
0
1
Android Camera 使用小结

Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Intent和MediaStroe调...

天下杰论
2013/06/24
0
2
Android应用开发之使用PhoneGap实现拍照上传功能

看这里:Android应用开发之使用PhoneGap实现拍照上传功能 在之前的使用Intellij Idea 搭建PhoneGap Android开发环境以及Android应用开发之使用PhoneGap实现位置上报功能两篇文章中,我们学习...

Realfighter
2015/02/05
0
3
安卓入门笔记之Activity

——本文来自博客园Tekkaman的博客Android之Activity ,IBM的developerWorks网站张勇的详解Android的Activity组件一文 ,CSDN博客hpoi的博客Android Activity的生命周期 ,感谢zzxap在CSDN论...

twobeings
2014/04/03
0
0
历时四年,给Google提交的Android Framework Bug终于被Fixed了

2014年在做一个Android终端设备开发过程中,发现了一个Android Framework层的Bug,给Google提交了issue和解决方案,和外界传言一致Google一般不太在意个人开发者提交的issue,直到2017年12月...

image_c
07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jvm堆内存的划分结构和优化,垃圾回收详解(详细解答篇)

在JVM中堆空间划分如下图所示 上图中,刻画了Java程序运行时的堆空间,可以简述成如下2条 1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代 2.新生代可以划分为三个区,Eden区,两个幸...

嘻哈开发者
16分钟前
0
0
CentOS 7.4 设置系统字符编码

1.语言变量LANG在 /etc/locale 文件中。 2.可以通过/ect/profile 来修改LC_TYPE 变量的值 添加如下代码 export LC_ALL="zh_CN.GBK" export LANG="zh_CN.GBK" 到profile文件中,变量的可以修改...

qimh
17分钟前
0
0
Kafka相关使用

安装前提,需要有jdk环境,还有zookeeper环境 zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/ zookeeper安装参考:https://www.jianshu.com/p/f7037105db46 kafka的下......

朝如青丝暮成雪
17分钟前
0
0
CentOS7 解决无法使用tab自动补全 tab代码提示

一、前言 对于刚刚开始学习linux的新人来说,linux的一切都显着神秘,只能惊叹于大牛在Linux上行云流水的操作。今天介绍一下在linux中自动补全的功能。 对于新人来说,在不懂得技巧的情况下,...

ziluopao
23分钟前
0
0
redis安装

https://www.cnblogs.com/feijl/p/6879929.html

ghou-靠墙哭
23分钟前
0
0
Spring核心——注解自动装载

从配置上扩展 之前的文章介绍了Spring的IoC容器配置管理方面的详细内容,需要了解的可以从IoC容器的设计模式开始阅读。在介绍基于注解配置的配置之前我们再重复一下在之前提到的基本认识: ...

随风溜达的向日葵
27分钟前
2
0
ElasticSearch学习(8)—— SearchType

Elasticsearch有四种类型的SearchType 1、query and fetch 向索引的所有分片(shard)都发出查询请求,各分片返回的时候把元素文档(document)和计算后的排名信息一起返回。这种搜索方式是最...

叶枫啦啦
28分钟前
0
0
MYSQL备份工具-mysqldump

介绍 mysqldump 是文本备份还是二进制备份 它是文本备份,如果你打开备份文件你将看到所有的语句,可以用于重新创建表和对象。它也有 insert 语句来使用数据构成表。 语法 mysqldump 的语法是...

郭恩洲_OSC博客
30分钟前
0
0
我的第一个go web框架

使用了beego等go web开发框架之后,感觉各种不方便,尤其是在接收参数、和自定义输出的时候,各种难受,定义各种model,这不是找事情嘛??尤其是在角色权限控制的时候我也感觉力不从心。。。...

独坐苔痕但观罗敷
31分钟前
0
0
自动代码生成图形化工具

自动生成Spring代码 https://github.com/EliMirren/Spring-generator 自动生成Vertx https://gitee.com/duhua/vertx-generator...

奋斗的小牛
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部