Android_照相机Camera_调用系统照相机返回data为空

摘要:
默认情况下,不需要指定intent putExtra;相机有自己的默认存储路径,拍摄的照片将返回缩略图。如果您想访问原始图像,可以通过datextra获取原始图像的位置。也就是说,如果指定了目标uri,数据将没有数据。如果未指定uri,数据将返回数据!现在想想,这个设计还是很合理的!
本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/16916279
1.调用系统照相机

[java] view plaincopy在CODE上查看代码片派生到我的代码片

 
  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就返回有数据!现在想想,这种设计还是很合理的!

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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系统照相机部分关键源码
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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.   
  12.         setResult(RESULT_OK);   //直接返回RESULT_OK,并没有指定intent  
  13.         finish();  
  14.     } catch (IOException ex) {  
  15.         // ignore exception  
  16.     } finally {  
  17.         Util.closeSilently(outputStream);  
  18.     }  
  19. else {  
  20.     Bitmap bitmap = createCaptureBitmap(data);  
  21.     // 返回RESULT_OK,并包含一个Intent对象,其中Extra中科key为data,value为一个bitmap  
  22.     setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));  
  23.     finish();  
  24. }  
 
 

免责声明:文章转载自《Android_照相机Camera_调用系统照相机返回data为空》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C++、C#、VB各语言日志代码WPF中TreeView的展开 (转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Unity在UI界面上显示3D模型/物体,控制模型旋转

Unity3D物体在UI界面的显示 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新!助力快速利用 UGUI 完成 3D 物体在 UI 界面的显示为新手节省宝贵的时间,避免采坑! Chinar 教程效果:...

Jmeter脚本增强之参数化(多方式实现)(6)

参数化的场景: ①在插入记录时,数据库对某些字段唯一限制,这时需要参数化(不能传固定参数) ②在压测过程中,比如登录操作,需要使用不同的用户登录,模拟真实的使用场景(避免数据库查询缓存),模拟500并发,需要500个不同的用户账号 这种方式通常被称为数据驱动测试(Data Driven Test),参数的取值范围被称为数据池(Data Pool)。 支持如...

C#实现局部峰值查找,功能对应Matlab中的findpeaks.m

相关算法的原理参考Ronny,地址:图像分析:投影曲线的波峰查找,这里感谢下原作者。 参照C++的代码实现,我用C#翻译了下,其实原理也很简单的,下面放相关实现代码: private double[] oneDiff(double[] data) { double[] result = new...

图像数据类型及颜色空间转换

一 图像数据类型转换 在skimage中,一张图片就是一个简单的numpy数组,数组的数据类型有很多种,相互之间可以转换。这些数据类型及取值范围如下表所示: 一张图片的像素值范围是[0,255], 因此默认类型是unit8, 可用如下代码查看数据类型: from skimage import io,data img=data.astronaut() pr...

[转]CURL常用命令

From:http://www.cnblogs.com/gbyukg/p/3326825.html 常用参数 -v/--verbose 小写的v参数,用于打印更多信息,包括发送的请求信息,这在调试脚本是特别有用。 -m/--max-time <seconds> 指定处理的最大时长 -H/--header <header> 指定请求头...

微信小程序商城订单上拉加载更点击切换订单状态(接口)

实现功能:如图 html (tab组件 需要的话请查看博客) <Tab tabList="{{tabList}}"bindtabsItemChange="tabsItemChange"> <view class="order"wx:for="{{orderList}}"wx:for-index="index"wx:key="i...