调用相机拍照时onActivityResult中Activity.RESULT_OK始终返回-1求助
问题分析与解决
嘿,我一眼就发现你代码里的关键错误了!你的onActivityResult方法里的判断逻辑完全搞混了requestCode和resultCode的作用,这才导致条件始终不成立。
错误点解析
你现在写的第一个判断条件是:
if (requestCode == Activity.RESULT_OK)
这完全是逻辑错误:
requestCode是你启动相机时传入的REQUEST_CAMERA(值为1),用来区分不同的请求;Activity.RESULT_OK是系统返回的成功结果码(值为-1),属于resultCode的判断范畴。
把这两个值做相等判断,结果当然永远是false!
修正后的代码
把判断逻辑调整为先验证请求码,再验证结果码,代码如下:
final int REQUEST_CAMERA = 1; // 启动相机的代码不变 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, REQUEST_CAMERA); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 先判断是不是相机请求,再判断结果是否成功 if (requestCode == REQUEST_CAMERA) { if (resultCode == Activity.RESULT_OK) { Bundle bundle = data.getExtras(); Bitmap btm = (Bitmap) bundle.get("data"); _ivDoc.setImageBitmap(btm); } else { // 可以在这里处理用户取消拍照的情况 Toast.makeText(this, "拍照已取消", Toast.LENGTH_SHORT).show(); } } }
额外注意事项
- 权限问题:如果你的App运行在Android 6.0(API 23)及以上系统,别忘了动态申请相机权限,否则相机可能无法启动,直接返回失败结果。
- 高清图片获取:当前代码获取的是相机返回的缩略图,如果需要获取高清原图,你需要指定图片的保存路径,在启动相机时通过
EXTRA_OUTPUT传递给Intent,之后在onActivityResult里从指定路径读取图片。
内容的提问来源于stack exchange,提问作者satyender
相关产品推荐
相关产品推荐

