1.调用系统照相机

[java] view plaincopy

  1. //实例化一个intent,并指定action
  2. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  3. //指定一个图片路径对应的file对象
  4. uri = Uri.fromFile(ImageUtil.getImageFile());
  5. intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
  6. //启动activity
  7. startActivityForResult(intent, REQUEST_CODE_CAMERA);

但是在onActivityResult(int requestCode, int resultCode, Intent data)代码中得到的data总为null?

2.原因分析

于是我查看了Android系统框架Camera应用程序,找到了关于系统照相机如何处理返回值data问题!

默认情况下,即不需要指定intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);照相机有自己默认的存储路径,拍摄的照片将返回一个缩略图。如果想访问原始图片,可以通过dat extra能够得到原始图片位置。即,如果指定了目标uri,data就没有数据,如果没有指定uri,则data就返回有数据!现在想想,这种设计还是很合理的!

  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3. switch (requestCode) {
  4. case REQUEST_CODE_CAMERA:
  5. if (resultCode == RESULT_OK) {
  6. if(data !=null){ //可能尚未指定intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
  7. //返回有缩略图
  8. if(data.hasExtra("data")){
  9. Bitmap thumbnail = data.getParcelableExtra("data");
  10. //得到bitmap后的操作
  11. }
  12. }else{
  13. //由于指定了目标uri,存储在目标uri,intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
  14. // 通过目标uri,找到图片
  15. // 对图片的缩放处理
  16. // 操作
  17. }
  18. }
  19. }
  20. }

3.Android系统照相机部分关键源码

  1. // First handle the no crop case -- just return the value.  If the
  2. // caller specifies a "save uri" then write the data to it's
  3. // stream. Otherwise, pass back a scaled down version of the bitmap
  4. // directly in the extras.
  5. if (mSaveUri != null) { //存在mSaveUri,即指定了目标uri
  6. OutputStream outputStream = null;
  7. try {
  8. outputStream = mContentResolver.openOutputStream(mSaveUri);
  9. outputStream.write(data);
  10. outputStream.close();
  11. setResult(RESULT_OK);   //直接返回RESULT_OK,并没有指定intent
  12. finish();
  13. } catch (IOException ex) {
  14. // ignore exception
  15. } finally {
  16. Util.closeSilently(outputStream);
  17. }
  18. } else {
  19. Bitmap bitmap = createCaptureBitmap(data);
  20. // 返回RESULT_OK,并包含一个Intent对象,其中Extra中科key为data,value为一个bitmap
  21. setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));
  22. finish();
  23. }
 
 

Android_照相机Camera_调用系统照相机返回data为空的更多相关文章

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

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

  2. 解决ajaxfileupload上传文件在IE浏览器返回data为空问题

    关于ajaxfileupload,建议还是别用,已经没有人维护的脚本了,笔者就是入了这个坑. 在IE浏览器中ajaxfileupload返回data为空 jq.ajaxFileUpload ( { u ...

  3. Android调用系统照相机

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

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

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

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

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

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

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

  7. IOS 调用系统照相机和相册

    /** *  调用照相机 */ - (void)openCamera { UIImagePickerController *picker = [[UIImagePickerController all ...

  8. 关于调用系统照相机Activity被销毁问题解决

    <activity                  android:name=".visitplan_finish"                  android:co ...

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

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

随机推荐

  1. JProfiler远程监控

    1.  服务端安装JProfiler(与客户端版本一致) 2.  客户端配置连接: A).session——integration wizards——New remote integration B) ...

  2. Linux下批量修改文件名(rename)

    原文地址: http://blog.csdn.net/sea_shore/article/details/6102437 1.rename命令批量修改文件名, 其实linux下可以使用别的办法来批量修 ...

  3. 好好的P2P,咋说爆就爆?

    P2P 理财就是通过互联网理财,即个人对个人,又称点对点网络借贷 ,是指以公司为中介机构,把借贷双方对接起来实现各自的借贷需求.借款方可以是无抵押贷款或是有抵押贷款,而中介一般是收取双方或单方的手续费 ...

  4. normalize.css的使用

    normalize.css有下面这几个目的: 保护有用的浏览器默认样式而不是完全去掉它们一般化的样式:为大部分HTML元素提供修复浏览器自身的bug并保证各浏览器的一致性优化CSS可用性:用一些小技巧 ...

  5. .Net Core Md5加密整理

    一..Net Core中Md5使用说明 .Net Core中自带Md5加密处理,使用方法和 .Net Framework中相同 所在命名空间 using System.Security.Cryptog ...

  6. std::lower_bound 功能

    std::lower_bound default (1) template <class ForwardIterator, class T> ForwardIterator lower_b ...

  7. LaTeX :font size 修改字体大小的几种方式

    调整字体大小的几种方式,大小依次增大,具体如下: \tiny \scriptsize \footnotesize \small \normalsize \large \Large \LARGE \hu ...

  8. NeoFinder for Mac(增强型文件管理工具)破解版安装

    1.软件简介    NeoFinder 是 macOS 系统上一款帮助用户管理磁盘的 Mac 工具,NeoFinder for mac 能迅速组织您的数据,无论是在外部或内部磁盘,或任何其他卷.它能记 ...

  9. Android UI系列-----LinearLayout的综合使用

    这里将会对LinearLayout的布局方式进行一个综合的使用,通过一个例子来看看LinearLayout的嵌套布局方式,在这之前首先介绍三个属性: 1.①android:layout_weigth: ...

  10. 我对android开发的一点小感悟小看法

    “Android”,“Android开发”等等这些词成了时下最热的词,也是时下大众最关注最吸引人眼球的话题,当然,最热门的行业也意味着高薪,好的就业环境,但同时也意味着强大的竞争力! Android系 ...