【问题标题】:CameraX is not initialized properly. Either CameraX.initialize() needs to have been called or the CameraXConfig.ProviderCameraX 未正确初始化。需要调用 CameraX.initialize() 或 CameraXConfig.Provider
【发布时间】:2019-12-17 22:09:34
【问题描述】:

我正在按照发行说明 (https://developer.android.com/jetpack/androidx/releases/camera#camera-core-1.0.0-alpha07) 使用新的 camerax(2019 年 12 月 4 日),并看到 CameraX 未初始化的错误。我的测试手机是诺基亚 5,之前使用的是旧版本的 CameraX 依赖项。 如果能在 getInstance() 方法中帮助我解决这个错误,我将不胜感激。

类似问题java.lang.IllegalStateException: CameraX not initialized yet

cameraProviderFuture = ProcessCameraProvider.getInstance(this);

在这里崩溃

    cameraProviderFuture.addListener(() -> {
        try {
            ProcessCameraProvider cameraProvider = (ProcessCameraProvider) cameraProviderFuture.get();
            bindPreview(cameraProvider);
        } catch (ExecutionException | InterruptedException e) {
            e.printStackTrace();
        }
    }, ContextCompat.getMainExecutor(this));

例外情况如下:

访问隐藏方法 Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V(浅灰名单,反射) 访问隐藏方法 Ldalvik/system/CloseGuard;->warnIfOpen()V(浅灰名单,反射) D/CameraActivity: onCreate: D/AndroidRuntime:关闭虚拟机 E/AndroidRuntime: 致命异常: main 进程:com.example.camx,PID:26631 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.camx/com.example.camx.CameraActivity}:java.lang.IllegalStateException:CameraX 未正确初始化。要么需要调用 CameraX.initialize(),要么必须由您的 Application 类实现 CameraXConfig.Provider 接口。 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2928) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3063) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:198) 在 android.app.ActivityThread.main(ActivityThread.java:6729) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 原因:java.lang.IllegalStateException:CameraX 未正确初始化。要么需要调用 CameraX.initialize(),要么必须由您的 Application 类实现 CameraXConfig.Provider 接口。 在 androidx.camera.core.CameraX.getOrCreateInstance(CameraX.java:797) 在 androidx.camera.lifecycle.ProcessCameraProvider.getInstance(ProcessCameraProvider.java:98) 在 com.example.camx.CameraActivity.onCreate(CameraActivity.java:92) 在 android.app.Activity.performCreate(Activity.java:7136) 在 android.app.Activity.performCreate(Activity.java:7127) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3063) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:198) 在 android.app.ActivityThread.main(ActivityThread.java:6729) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) I/Process:发送信号。 PID:26631 SIG:9 进程 26631 终止。

Gradle 依赖:

def camerax_version = "1.0.0-alpha07"
implementation "androidx.camera:camera-core:$camerax_version"
implementation "androidx.camera:camera-camera2:$camerax_version"
implementation "androidx.camera:camera-view:1.0.0-alpha04"
implementation "androidx.camera:camera-lifecycle:1.0.0-alpha01"

【问题讨论】:

  • 另外,请确保您使用的是这些相机库的相同/兼容版本。我有一个是 v1.0.0-alpha31,另一个是 v1.1.0-beta1,这会导致运行时崩溃。使它们都 v1.1.0-beta1 修复它。

标签: android


【解决方案1】:

参考:https://developer.android.com/jetpack/androidx/releases/camera#camera-camera2-1.0.0-alpha07

如 CameraX 参考中所述,开发人员应在 Application 类中实现 CameraXConfig.Provider

CameraX 初始化已更改。应用程序应该实现CameraXConfig.Provider,并使用androidx.camera.camera2提供的默认Camera2Config

import androidx.camera.camera2.Camera2Config
import androidx.camera.core.CameraXConfig

public class MyCameraXApplication : Application(),  CameraXConfig.Provider {
    override fun getCameraXConfig(): CameraXConfig {
            return Camera2Config.defaultConfig(this)
    }
}

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 2020-04-21
    • 2012-06-17
    • 2022-01-22
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多