首页 > 解决方案 > 识别器尚未初始化,请确保先调用 Recognizer.getInstance().initialize()

问题描述

原因:com.microblink.RecognizerNotInitializedException:识别器尚未初始化,请务必先调用 Recognizer.getInstance().initialize()。

我认为 sdk 在使用后无法释放相机实例,所以下次返回后再次调用捕获收据时,我遇到了这个问题。

即使活动关闭,我也可以在 logcat 中看到此日志重复

I/CameraManagerGlobal: Camera 1 facing CAMERA_FACING_FRONT state now CAMERA_STATE_OPEN for client com.samsung.adaptivebrightnessgo API Level 2
I/CameraManagerGlobal: Camera 1 facing CAMERA_FACING_FRONT state now CAMERA_STATE_ACTIVE for client com.samsung.adaptivebrightnessgo API Level 2
I/CameraManagerGlobal: Camera 1 facing CAMERA_FACING_FRONT state now CAMERA_STATE_IDLE for client com.samsung.adaptivebrightnessgo API Level 2
I/CameraManagerGlobal: Camera 1 facing CAMERA_FACING_FRONT state now  CAMERA_STATE_CLOSED for client com.samsung.adaptivebrightnessgo API Level 2

您可以在示例 sdk 上重现它,也可以使用自定义识别器视图。

标签: androidmicroblink

解决方案


我修复了这个错误添加这个:

  void didChangeAppLifecycleState(AppLifecycleState state) {
    // App state changed before we got the chance to initialize.
    if (_controller == null || !_controller!.value.isInitialized) {
      return;
    }
    if (state == AppLifecycleState.inactive) {
      _controller?.dispose();
    } else if (state == AppLifecycleState.resumed) {
      if (_controller != null) {
        print('muere');
      }
    }
  }

它在 initState 中调用

  @override
  void initState() {
    super.initState();
    didChangeAppLifecycleState(AppLifecycleState.detached);
  }

文档告诉我们这一点:

处理生命周期状态 # 从相机插件的 0.5.0 版开始,插件不再处理生命周期更改。这意味着开发人员现在负责在更新生命周期状态时控制相机资源。不这样做可能会导致意外行为(例如,如问题 #39109 中所述)。可以通过重写 didChangeAppLifecycleState 方法来处理生命周期更改,如下所示:


推荐阅读