调用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时 ...
随机推荐
- java面试题之BIO、NIO、AIO的应用场景
定义: 1.BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时,服务器就启动一个线程来处理,如果这个连接不处理任何事情会造成不必要的线程开销,可以通过线程池机制改善. 2.NI ...
- Linux中将一个GBK编码的文件转换成UTF-8编码文件
Linux中将一个GBK编码的文件转换成UTF-8编码文件 使用iconv 命令iconv -f GBK -t UTF-8 file1 -o file2 输出另一个文件,然后再覆盖源文件内容
- UVa11762 Race to 1
期望DP 一个数只能分解成不大于它的数,那么转移构成拓扑关系. 试了一下预处理出不大于x的质数个数,然而程序并没有变快 /*by SilverN*/ #include<algorithm> ...
- 应用gulp工具构建个自动算rem布局的小例子
因为最近可能需要做移动端rem布局,因为rem布局需要将px转化成rem,如果次都需要拿计算器算就太low了,所以就想到用less和gulp. 因为也是初学gulp,站点的文件结构还没想到太好,也只是 ...
- JavaScript 在双引号之间引用变量
可以采用 ' + 变量 + ' .
- AC日记——爱情之路 codevs 2070
2070 爱情之路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description yh非常想念他的女朋友小y,于是他 ...
- Object 转 String
做项目中 : map 为Map<String,Object> a.setmoney(new BigDecimal((String)map.get("money"))); ...
- MyBatis_SelectKey使用oracle 序列插入主键
mapper 如下: 使用<selectkey>实现 也可以使用oracle的row 级触发器trigger实现: <?xml version="1.0" enc ...
- linux mysql添加用户名并实现远程访问
第一步:登陆linux,在终端登陆mysql #mysql -u root -p 第二步:查询系统用户列表并进行添加用户 mysql>select host,user,password from ...
- 【maven】Maven将中央仓库修改为阿里云的仓库地址
<mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexu ...