调用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返回为空的分析及处理方法的更多相关文章
- 解决方案:c调用python,PyImport_Import或者PyImport_ImportModule总是返回为空
下面c_python_utils.h是处理工具函数,test.cpp是测试程序,hello.py是python类 可是当我集成到项目中的时候,PyImport_Import总是返回为空,起初我以为是i ...
- shell调用函数返回值深入分析
编写shell脚本过程中,我们经常会自定义一些函数,并根据函数的返回值不同来执行相应的流程,那么我们如何来获取函数的返回值呢? 首先shell中调用函数有两种方式: 第一种:value=`functi ...
- C与Lua互相调用的时候,栈变化分析
1 C调用Lua函数的堆栈变化 例子 Lua文件中的函数 function testNewCounter2() return "第四个结果" end C中的例子 void t_n ...
- python调用数据返回字典dict数据的现象2
python调用数据返回字典dict数据的现象2 思考: 话题1连接:https://www.cnblogs.com/zwgbk/p/10248479.html在打印和添加时候加上内存地址id(),可 ...
- sqlserver,获取调用存储过程返回数据的方法。
1,获取存储过程最后select返回的结果集.SELECT 数据集返回值. 因为select返回的结果是一个表.所以返回的结果需要用一个表接收.使用临时表接收. 被调用的存储过程最后是这样:返回了一个 ...
- 调用AJAX返回JSON、XML数据类型
1.调用AJAX返回JSON数据 用下拉列表显示Nation表民族名称 主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi ...
- shell函数(调用、返回值,返回值获取)
Shell函数返回值,常用的两种方式:return,echo 1) return 语句shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回.示例1: [devadmin@swa ...
- myabatis oracle 调用存储过程返回list结果集
Mapper.xml 配置 <resultMap type="emp" id="empMap"> <id property="emp ...
- JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
今天在程序中出现一个bugger ,调试了好久,最后才发现,原来是这个问题. 做了一个实验: alert(parseInt("01")),当这个里面的值为01====>07时 ...
随机推荐
- [luoguP2761] 软件补丁问题(状压最短路)
传送门 n <= 20 很小 所以可以状态压缩 然后因为可能存在环,所以不能DP 那么就用spfa找最短路 被位运算坑了,不清楚优先级一定要加括号 ——代码 #include <queue ...
- 刷题总结——String painter(hdu2476)
题目: Problem Description There are two strings A and B with equal length. Both strings are made up of ...
- NOIP2017赛前模拟(5):总结
题目: 1.刮刮卡 已知n(n<=1000000)张刮刮卡按顺序排列,刮开可以获得B元现金和B个积分,购买刮刮卡需要A元,某人若按照顺序刮开的话··当B的总和小于A时便会停止刮卡(即花出去的钱多 ...
- java面试题之HashMap和HashTable底层实现的区别
HashMap和HashTable的区别: 相同点:都是以key和value的形式存储: 不同点: HashMap是不安全的:HashTable线程安全的(使用了synchronized关键字来保证线 ...
- FOJ Problem 2260 Card Game
Problem 2260 ...
- 【NOIP2016练习&BZOJ2125】T3 sp (树上倍增,最短路)
题意:给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径. 对于80%的数据环的个数<=1 对于100%的数据N<=10000,Q<=1 ...
- 在vue-cli环境下模拟数据接口及如何应用mockjs
第一种办法 1.需要先准备json文件 在根目录下新建个oapi文件夹下新建个iorder.json文件将需要遍历的json数据沾里面. 2.在build文件夹下新建dev-server.js 文件 ...
- json键的不能像值一样拼写的问题
今天碰到了一个json的键不能拼写的问题 解决方法是 先把json对象作为一个字符串拼写 然后再通过eavl函数转为json对象 $(".select_date").each( ...
- 41深入理解C指针之---指针与栈
一.借助第40指针与链表的相关内容,稍微修改即可: 1.定义头文件stack.h代码如下: #include <stdlib.h> #include <stdio.h> #if ...
- /sys/class/gpio 文件接口操作IO端口(s3c2440)
http://blog.csdn.net/mirkerson/article/details/8464231 在嵌入式设备中对GPIO的操作是最基本的操作.一般的做法是写一个单独驱动程序,网上大多数的 ...