CameraX 在直接启动模式下无法工作

问题描述 投票:0回答:1

尝试使用

CameraX
启动相机时,出现以下错误:

Caused by: java.lang.IllegalStateException: CameraX is not configured properly. The most likely cause is you did not include a default implementation in your build such as 'camera-camera2'.
    at androidx.camera.core.CameraX.<init> (CameraX.java:107)
    at androidx.camera.lifecycle.ProcessCameraProvider.getOrCreateCameraXInstance (ProcessCameraProvider.java:196)
    at androidx.camera.lifecycle.ProcessCameraProvider.getInstance (ProcessCameraProvider.java:182)

当我打电话时就会发生:

val cameraProviderFuture = ProcessCameraProvider.getInstance(context)

重新启动后解锁设备(即退出直接启动模式)后尝试启动时,代码可以正常工作,相机也可以正常工作。

如何解决这个问题?

android android-camera android-camerax
1个回答
0
投票

问题是

CameraX
库不适合在直接启动条件下工作。更具体地说,在调用
ProcessCameraProvider.getInstance(context)
时,配置相机时,在
CameraX
内部调用了以下代码(您可以在
CameraX
源代码 - 第 ~180 行中查找):

ServiceInfo serviceInfo = appContext.getPackageManager().getServiceInfo(
        new ComponentName(appContext, MetadataHolderService.class),
        PackageManager.GET_META_DATA | PackageManager.MATCH_DISABLED_COMPONENTS);

此代码尝试通过实现库提供的元数据检索 CameraXConfig.Provider,但抛出了

PackageManager.NameNotFoundException
,导致整个相机初始化过程失败。

此时我意识到我不应该真正期望

CameraX
维护人员解决这个问题,因此我创建了一个解决方法,在启动相机之前,检查我们是否使用 UserManager 在直接启动模式下运行.isUserUnlocked:

val userManager = getSystemService(USER_SERVICE) as UserManager

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N &&
    !userManager.isUserUnlocked
) {
    // We are in the direct boot mode - request the user to unlock the device first...
}

这可以避免崩溃,因为解锁设备后会启动相机。

© www.soinside.com 2019 - 2024. All rights reserved.