我们在做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();
}
这回找出问题所在了 ,相信大家也看明白了,,虽然不知道这样写有啥好处