android - 识别器尚未初始化,请确保先调用 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 上重现它,也可以使用自定义识别器视图。
解决方案
我修复了这个错误添加这个:
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 方法来处理生命周期更改,如下所示:
推荐阅读
- javascript - 为什么 jQuery ui 可选插件禁用了我原来的绑定点击功能
- javascript - 这里有什么问题?为什么我的 Javascript 不起作用?
- javascript - 我的主页上有图像幻灯片,但是当我转到其他页面时,它会引发错误
- python - 在python中编写html文件时保留分段符
- mongodb - MongoDB左连接嵌套文档
- node.js - 除了错误消息之外,您应该如何访问 Promise.allSettled() 对象数组中返回的堆栈跟踪?
- javascript - 根据 id 减去数量
- python - 写入文件问题 - 'list' 对象不可调用(Python)
- sql - 将 XML 节点附加到 SQL 中的现有树
- nestjs - NestJs/swagger:定义没有 DTO 类的引用模式