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

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

你可能感兴趣的:(Camera中MediaStore.EXTRA_OUTPUT遇到的问题)