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

filePath = ImageUtil.getCacheFilePath(this, StaticValue.PHOTO_PROTOCOL_ENTRUST);File file = new File(filePath);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调用相机相关源码:

得出在手动指定了uri之后,data就会为空。

  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) { //如果指定了uri
  6.     OutputStream outputStream = null;  
  7.     try {  
  8.         outputStream = mContentResolver.openOutputStream(mSaveUri);  
  9.         outputStream.write(data);  
  10.         outputStream.close();  
  11.   
  12.         setResult(RESULT_OK);  //只返回结果,不返回data数据
  13.         finish();  
  14.     } catch (IOException ex) {  
  15.         // ignore exception  
  16.     } finally {  
  17.         Util.closeSilently(outputStream);  
  18.     }  
  19. else { //默认情况不指定uri,会把data塞进result回调
  20.     Bitmap bitmap = createCaptureBitmap(data);  
  21.     setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));  
  22.     finish();  
  23. }  
解决办法:

①不指定uri,即,

Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intentFromCapture, CAMERA_ENTURST_PHOTO_REQ_CODE);
使用系统默认的uri路径。此时data不为空。

可以在data里面取得相应的数据,

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    switch (requestCode) {        case CAMERA_ENTURST_PHOTO_REQ_CODE:            if (resultCode == RESULT_OK) {                if (data != null) {                    if(data.hasExtra("data")){                        Bitmap bitmap = data.getParcelableExtra("data");                    }                }            }            break;    }}

②如文章开头指定uri,将图片路径定义全局,不使用data获取先关数据。(推荐)




更多相关文章

  1. 获取定位数据
  2. Fragment与FragmentActivity间的数据通讯详细解决方案
  3. android之SQLite数据库insert操作
  4. 利用android自带的JSONObject解析json数据
  5. Android 调用系统相机,拍照并返回显示
  6. android把字符串内容保存到指定路径
  7. android 以编程的方式使用SQLite数据库 执行CRUD(创建 读取 更新
  8. android操作sqlite3的blob字段,显示数据中的图片

随机推荐

  1. Android(安卓)ID 理解
  2. 浅析Android中MVP及Demo
  3. [置顶] 您可能还不知道的八款开源Android
  4. Android(安卓)设备管理员-android 一键锁
  5. Android利用ViewPager实现一个简单的载入
  6. mtk6589显示子系统笔记(一)
  7. 使用achartengine开发曲线图相关的Androi
  8. Android(安卓)修改init.rc
  9. Android数据库学习123
  10. 如何打开USB调试模式(Android(安卓)所有