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

CameraX imageCapture.takePicture在Android 12设备上无法正常工作

CameraX拍照功能Android 12适配问题

问题现象

  • 基于CameraX实现的拍照逻辑,在Android 12以下版本设备可正常运行
  • Android 12设备上触发拍照后,既不触发onImageSaved成功回调,也不触发onError错误回调,在错误回调处设置断点无法命中,无法直接定位异常原因

问题对应实现代码如下:

long x = System.currentTimeMillis();

String fileName = getExternalFilesDir(null) + "" + x + ".jpg";

File file = new File(fileName);

ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions.Builder(file).build();
imageCapture.takePicture(outputFileOptions, executor, new ImageCapture.OnImageSavedCallback() {
    @Override
    public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
        Log.e("xxxx", "yyy");
        new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, "Image Saved successfully", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onError(@NonNull ImageCaptureException error) {
        error.printStackTrace();
    }
});

修复方案

按优先级逐一排查修复即可:

  • 修复文件路径拼接错误:现有代码拼接存储路径时漏掉了文件分隔符,getExternalFilesDir(null)返回的路径末尾不带路径分隔符,直接拼接时间戳会导致文件生成在files目录的同级路径而非目录内部,Android 12对目录访问权限管控更严格,这种非法路径写入会导致IO流程阻塞无响应。修改路径拼接逻辑:
// 补充File.separator作为目录分隔符
String fileName = getExternalFilesDir(null) + File.separator + x + ".jpg";
  • 升级CameraX依赖版本:1.0.2以下的CameraX版本存在Android 12平台兼容bug,会出现拍照无回调的问题,将CameraX核心库(camera-camera2、camera-lifecycle、camera-view)升级到1.0.2及以上稳定版本即可修复该系统版本兼容问题。
  • 校验传入的executor有效性:不要传入被阻塞、已关闭的自定义线程池executor,可先替换为主线程executor做验证:ContextCompat.getMainExecutor(MainActivity.this),确认回调正常触发后再根据业务需求切换为后台线程executor。
  • 检查清单文件配置:如果项目targetSdkVersion升级到31,需要给所有包含intent-filter的组件(包括CameraX依赖中涉及的相机相关组件)显式声明android:exported属性,避免服务绑定失败导致拍照流程卡住无回调。

内容的提问来源于stack exchange,提问作者Lahiru Prasanna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:36:26