Android调用系统相机onActivityResult返回参数data为null
2017-09-07 11:03
561 查看
一般调用系统相机的代码:
在OnActivityResult回调的时候发现intetn的data值为null。如果企图通过data取值就会崩溃,
查看相关资料,Android调用相机相关源码:
得出在手动指定了uri之后,data就会为空。
// First handle the no crop case -- just return the value. If the
// caller specifies a "save uri" then write the data to it's
// stream. Otherwise, pass back a scaled down version of the bitmap
// directly in the extras.
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();
}
解决办法:
①不指定uri,即,
使用系统默认的uri路径。此时data不为空。
可以在data里面取得相应的数据,
②如文章开头指定uri,将图片路径定义全局,不使用data获取先关数据。(推荐)
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就会为空。
// First handle the no crop case -- just return the value. If the
// caller specifies a "save uri" then write the data to it's
// stream. Otherwise, pass back a scaled down version of the bitmap
// directly in the extras.
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();
}
解决办法:
①不指定uri,即,
Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intentFromCapture, CAMERA_ENTURST_PHOTO_REQ_CODE);
使用系统默认的uri路径。此时data不为空。
可以在data里面取得相应的数据,
@Override protected 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获取先关数据。(推荐)
相关文章推荐
- 解释 Android 调用系统相机,在onActivityResult中接收的data为null的原因
- Android_照相机Camera_使用intent调用系统照相机在onActivityResult返回data为空
- Android调用相机无法执行onActivityResult或data为null
- Android调用相机无法执行onActivityResult或data为null
- android 调用系统相机或者系统相册功能时,onActivityResult方法不执行问题的解决过程
- android 调用系统相机拍照,返回的data为null
- 关于相机拍照获取图片onActivityResult返回data 为null的问题
- android onActivityResult data 取不到值 返回Null
- Activity的LaunchMode导致调用系统相册选取图片立即返回RESULT_CANCELED,data为null
- Android 调用系统相机返回data为null
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- 小米5 调用系统相机 onActivityResult 里面获取size为0
- 安卓开发没有关闭界面就调用了onActivityResult方法?onActivityResult方法Intent-data总是null
- 调用系统相机 data返回null
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时为什么会回到home界面或者到前一个界面,然后才会跳转到当前activity
- android 调用系统相机,预置路径,解决小米等机型uri返回为null的问题
- android调用系统相机返回null的bug
- Android基础--调用系统相机,打开相册,展示到界面,出现的一些问题Uri为空,data为null,图片错乱问题
- Android调用系统的裁剪后,无法响应onActivityResult()
- android 调用系统相机,预置路径,解决小米等机型uri返回为null的问题