Camera中MediaStore.EXTRA_OUTPUT遇到的问题

我们在做Camera应用的时候,经常用到打开Camera拍照然后在onActivityResult返回的intent中获取bitmap

然而当我们需要将拍摄的照片存储在SDcard的时候,需要在startActivityForResult中的intent参数加上这么一句

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, GenerateFileUri());
这样我们就可以将拍摄的图片存在我们想存的地方。但是加上这一句后,出现一个问题: onActivityResult参数中 intent  is  null

不可思议

我们追踪一下Camera源码 网址如下:https://github.com/android/platform_packages_apps_camera/blob/gingerbread-release/src/com/android/camera/Camera.java#L1186

嗯 两千多行代码 估计看完今儿就下班了。我们还是从MediaStore.EXTRA_OUTPUT开始找 发现这么一句

private void setupCaptureParams() {
        Bundle myExtras = getIntent().getExtras();
        if (myExtras != null) {
            mSaveUri = (Uri) myExtras.getParcelable(MediaStore.EXTRA_OUTPUT);
            mCropValue = myExtras.getString("crop");
        }
    }

我们接着找 mSaveUri 找到如下代码

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();
            }

这回找出问题所在了  ,相信大家也看明白了,,虽然不知道这样写有啥好处

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值