一般调用系统相机的代码:
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相机的相关源码。
- if (mSaveUri != null) { //如果指定了uri
- OutputStream outputStream = null;
- try {
- outputStream = mContentResolver.openOutputStream(mSaveUri);
- outputStream.write(data);
- outputStream.close();
- setResult(RESULT_OK); //只返回结果,不返回data数据
- finish();
- } catch (IOException ex) {
- // ignore exception
- } finally {
- Util.closeSilently(outputStream);
- }
- } else { //默认情况不指定uri,会把data塞进result回调
- Bitmap bitmap = createCaptureBitmap(data);
- setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));
- finish();
- }
通过源码的8行能看出 假如我们保存了Uri, 就返回结果,不返回data数据。
所以在onActivityResult参数的data中就会null。
解决办法
Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intentFromCapture, CAMERA_ENTURST_PHOTO_REQ_CODE);
这样在data就能得到数据了