调用Camera返回为空的分析及处理方法

前言

大家可能遇到了这样的情况,调用Camera,然后指定自定义的保存路径,结果返回的Intent为空。我们来分析一下原因。

分析

首先看Camera的部分逻辑,在源码中的Camera.java的doAttach()方法里面。

// First handle the no crop case -- just return the value.  If the
// caller specifies a "save uri" then write the data to it's
// stream. Otherwise, pass back a scaled down version of the bitmap
// directly in the extras.
if (mSaveUri != null) {
  OutputStream outputStream = null;
  try {
     outputStream = mContentResolver.openOutputStream(mSaveUri);
     outputStream.write(data);
     outputStream.close();

     setResult(RESULT_OK);
     finish();
     } catch (IOException ex) {
         // ignore exception
     } finally {
         Util.closeSilently(outputStream);
     }
} else {
  Bitmap bitmap = createCaptureBitmap(data);
  setResult(RESULT_OK,
         new Intent("inline-data").putExtra("data", bitmap));
  finish();
}

注释也有明确解释,假如mSaveUri不为空,则直接返回RESULT_OK,不会回传其他任何东西。假如为空,则会回传一个bitmap。

再看看我们调用Camera的代码。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Date date = new Date();
String photoDCIM = Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_DCIM; // 默认相册的路径
String path = photoDCIM + File.separator + date.getTime() + ".jpg";
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path )));
startActivityForResult(intent, PICTURE_CAMERA);

上面带指定的保存路径path ,就是Camera中的mSaveUri。所以结果就是Camera只会返回RESULT_OK。

结论

我们调用Camera可以有2种方式获得拍照的图片:

第1种是指定保存路径。

如上面的示例代码,将path设置为成员变量,在onActivityResult()中,直接读取该值即可。

第2种是不指定保存路径。

调用方法如下:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
getActivity().startActivityForResult(intent, PICTURE_CAMERA);

onActivityResult中

Bitmap bitmap= data.getParcelableExtra("data");  

这样就能得到拍照的图片了。

总结

在日常使用过程中,推荐使用指定保存路径,这样可以方便获得File,然后做其他的操作。

调用Camera返回为空的分析及处理方法

时间: 2024-08-10 23:58:57

调用Camera返回为空的分析及处理方法的相关文章

shell调用函数返回值深入分析

编写shell脚本过程中,我们经常会自定义一些函数,并根据函数的返回值不同来执行相应的流程,那么我们如何来获取函数的返回值呢? 首先shell中调用函数有两种方式: 第一种:value=`function_name [arg1 arg2 ......]` 或 第二种:function_name [arg1 arg2 ......] echo $? 这两种有什么区别呢? 举个例子来说: [[email protected] ~]# cat test.sh #!/bin/sh function aa

Camera从应用到CameraService分析

文章根据这个整理而成.http://blog.chinaunix.net/uid-25314474-id-2938255.html.找到最后才发现上面介绍的Camera竟然是基于Android1.0写的文章,顿时泪奔,不过也能从中学到知识.可以通过    http://androidxref.com/  在线查看源码进行学习. 我6月4号写了大概,现在把native的binder看了一遍,再来缕下camera代码.  很多知识是从安卓框架揭秘看的. 写在前面的话android_hardware_

调用AJAX返回JSON、XML数据类型

1.调用AJAX返回JSON数据 用下拉列表显示Nation表民族名称 主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he

ajax 异步调用把返回值赋给一个全局变量的用法,最主要的就是把async属性改为 false,

<script> $(document).ready(function () { <% string dqsj = System.DateTime.Now.ToString("yyyy-MM-dd"); %> seach(); }); var shuju = ""; var sj = ""; function se() { seach(); } function seach() { $(function () { var

函数的调用和返回

函数调用分析 对有递归特性的编程语言来说,区分函数定义和函数调用是十分有必要的.函数定义规定了函数的行为,函数每次调用都创建一个函数实例.虽然一个函数只有一个定义,随着时间的流逝,它可能产生很多不同的实例.对于一个递归函数来说,若干个实例可能会同时存在. 每个函数实例都需要分配内存空间,一个函数从调用到返回,它的活动记录包括以下内容: 本地存储   包括参数.局部变量.以及编译器在实现函数时使用的辅助空间. 返回信息   当这次调用结束时,执行流程应该在哪里继续?怎样继续? 活动记录指的是一个函

jQuery的ajax调用webservice返回XML数据传参错误

jQuery的ajax调用webservice返回XML数据传参错误: 有时候使用jquery的ajax调用带有参数的webservice返回XML格式输出的时候,会出现传参错误,当然错误的原因可能是多种多样的,下面就简单介绍一种. 一.错误代码: 1.ajax代码: $.ajax({ type:"post", url:"_service.asmx/getDataFromATable", data:" { tablename: temp }",

Camera图像处理原理及实例分析-重要图像概念

Camera图像处理原理及实例分析 作者:刘旭晖  [email protected]  转载请注明出处 BLOG:http://blog.csdn.net/colorant/ 主页:http://rgbbones.googlepages.com/ 做为拍照手机的核心模块之一,camera sensor 效果的调整,涉及到众多的参数,如果对基本的光学原理及 sensor 软/硬件对图像处理的原理能有深入的理解和把握的话,对我们的工作将会起到事半功倍的效果.否则,缺乏了理论的指导,只能是凭感觉和经

[转]jQuery调用ASPX返回json

本文转自:http://www.cnblogs.com/fire-phoenix/archive/2009/11/13/1614146.html 本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再代码里使用 <script src="_scripts/jQuery-1.3.2.js" type="text/javascri

SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.filefilter.FalseFileFilter; import org.slf4j.Logger; import org.s