Android调用系统相机onActivityResult返回参数data为null

一般调用系统相机的代码:

Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intentFromCapture, CAMERA_ENTURST_PHOTO_REQ_CODE);

在OnActivityResult回调的时候发现intetn的data值为null。如果企图通过data取值就会崩溃;

通过查看Android相机的相关源码。

  1. if (mSaveUri != null) { //如果指定了uri
  2.     OutputStream outputStream = null;  
  3.     try {  
  4.         outputStream = mContentResolver.openOutputStream(mSaveUri);  
  5.         outputStream.write(data);  
  6.         outputStream.close();  
  7.   
  8.         setResult(RESULT_OK);  //只返回结果,不返回data数据
  9.         finish();  
  10.     } catch (IOException ex) {  
  11.         // ignore exception  
  12.     } finally {  
  13.         Util.closeSilently(outputStream);  
  14.     }  
  15. } else { //默认情况不指定uri,会把data塞进result回调
  16.     Bitmap bitmap = createCaptureBitmap(data);  
  17.     setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));  
  18.     finish();  
  19. }  

通过源码的8行能看出 假如我们保存了Uri,  就返回结果,不返回data数据。

所以在onActivityResult参数的data中就会null。

解决办法

Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intentFromCapture, CAMERA_ENTURST_PHOTO_REQ_CODE);

 

 

这样在data就能得到数据了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值