调用startActivityForResult拍照成功但返回值为0的技术问题咨询
解决startActivityForResult调用相机拍照返回值为0的问题
当你通过MediaStore.EXTRA_OUTPUT指定了照片的保存Uri后,大部分相机应用拍摄完成后不会返回RESULT_OK(-1),而是返回RESULT_CANCELED(0),这不是Bug,是相机App的常规行为——因为照片已经按照你指定的路径保存好了,不需要再通过返回码传递成功状态。
解决方案
- 不要依赖
onActivityResult的返回码判断拍照是否成功,转而检查你指定的目标文件是否存在,且文件大小大于0(避免拍摄后取消导致的空文件)。 - 示例
onActivityResult处理逻辑:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CAMERA_REQUEST) { File photoFile = new File(Environment.getExternalStorageDirectory(), "MyPhoto.jpg"); // 判断文件是否存在且有效 if (photoFile.exists() && photoFile.length() > 0) { // 拍照成功,处理照片 Uri savedUri = Uri.fromFile(photoFile); // 后续操作,比如显示照片、上传等 } else { // 拍照失败或用户取消 } } }
额外注意事项
- 确保已经申请并获取了相机权限(
android.permission.CAMERA),以及对应版本的存储权限(Android 9及以下需要WRITE_EXTERNAL_STORAGE,Android 10+可借助FileProvider避免直接申请存储权限)。 - 部分小众相机App可能会有特殊行为,建议多测试几款主流相机App验证逻辑。
内容的提问来源于stack exchange,提问作者DeGM Narmadapuram
相关产品推荐
相关产品推荐

