You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:28:26