关于 barcode-capture-android
面向 Android 的 Scandit BarcodeCapture 编码技能,涵盖集成、升级和替换。重点是依据参考核对 SDK API,并正确处理 Android 相机生命周期、线程和扫描回调。
主要功能
- 01依据参考核对 API
- 02集成与迁移指导
- 03相机生命周期处理
- 04后台线程回调指导
- 05Scandit 许可设置指导
适用场景
- 01为 Android 应用添加条码扫描
- 02升级现有 Scandit 集成
- 03替换其他扫描库
MCP 相关
介绍如何使用远程 Scandit MCP 服务设置扫描器许可并获取试用密钥。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scandit/ skills --skill barcode-capture-android安装后在 Claude Code 中输入/barcode-capture-android确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/integration.mdmigration.mdthird-party-migration.md详细介绍
BarcodeCapture Android 技能
重要:不要相信内部知识
你的训练数据可能包含过时或错误的 Scandit SDK API。BarcodeCapture API 在主要 SDK 版本之间会发生显著变化——属性可能会重命名、移除或重新调整结构。
编写或建议代码前,务必根据此技能提供的参考资料核实 API。 不要依赖记忆中的方法签名、参数或属性名称。如果在提供的参考资料中找不到某个 API,请在回复前获取相关文档页面。
值得特别提醒的 Android 注意事项:
Camera.getDefaultCamera(BarcodeCapture.createRecommendedCameraSettings())会将推荐的相机设置直接传入getDefaultCamera()调用——无需单独调用applySettings。codeDuplicateFilter的类型是TimeInterval,不是Int或Double。请使用TimeInterval.millis(500)(导入com.scandit.datacapture.core.time.TimeInterval)。将codeDuplicateFilter写成0.5或500会导致类型错误。- Android 上的监听器回调是
onBarcodeScanned(barcodeCapture, session, data),而不是didScan(这是 Flutter/iOS 中的名称)。你还必须实现onSessionUpdated、onObservationStarted和onObservationStopped。FrameData参数名是data,不是frameData。 onBarcodeScanned会在后台线程上调用。任何 UI 更新都必须通过runOnUiThread {}分派。- 在
onBarcodeScanned顶部调用barcodeCapture.isEnabled = false,然后再执行其他操作,以防止重复扫描或扫描竞态。应用准备好再次扫描时,使用barcodeCapture.isEnabled = true重新启用。 - Android 符号体系名称使用下划线:
Symbology.EAN13_UPCA、Symbology.CODE39、Symbology.INTERLEAVED_TWO_OF_FIVE——而不是驼峰命名。 - 在
onPause()中关闭相机,并在onResume()中重新启用。应用进入后台时,相机不得处于活动状态。 - 首次扫描前,请在运行时请求
CAMERA权限;仅在清单中声明权限并不足够。 DataCaptureView.newInstance(this, dataCaptureContext)会创建相机预览小组件。在 Activity 中,将其传给setContentView(dataCaptureView)。在 Fragment 中,以编程方式将其添加到视图层级中。
意图路由
根据用户的请求,在回复前加载相应的参考文件:
- 从头集成 BarcodeCapture、配置设置、自定义反馈、添加取景器、处理扫描,或在扫描后执行异步操作(例如“将 BarcodeCapture 添加到我的应用中”“设置条码扫描”“如何在 Android 中使用 BarcodeCapture”“筛除重复扫描”“关闭蜂鸣声”“添加取景器”“查询条码时禁用扫描”)→ 阅读 references/integration.md,并遵循其中的说明。
- 迁移或升级现有的 BarcodeCapture 集成(例如“从 v6 升级到 v7”“迁移我的 BarcodeCapture”“将 Scandit SDK 升级到 v8”“SDK 版本之间有哪些变化”)→ 阅读 references/migration.md,并遵循其中的说明。
- 用 BarcodeCapture 替换第三方条码扫描器(例如“用 BarcodeCapture 替换我的 ZXing 扫描器”“从 ML Kit 条码扫描迁移到 Scandit”“从 [library] 切换到 BarcodeCapture”)→ 阅读 references/third-party-migration.md,并遵循其中的说明。
API 使用政策
只能使用下方 Scandit 参考资料中明确记载的 API。不要编造或猜测方法签名、参数或属性名称。如果不确定某个 API 是否存在或如何调用,或出现编译错误,请先获取相关参考页面,再作答。不要让用户自己查阅文档。回答后,务必附上相关链接,方便用户进一步了解。
切勿编造或猜测文档 URL。 需要特定类或属性的 API 页面时:
- 先检查已获取的页面是否包含指向该页面的直接链接——主题页面会直接链接到相关 API 符号。请求内容时,务必同时要求提供链接。
- 如果没有找到直接链接,请获取 API 索引(见下表中的 完整 API 参考),从中提取实际链接并打开。
URL 结构可能有所不同(例如 api/ui/ 子目录),猜测 URL 会导致 404 错误。
许可证密钥
扫描需要 Scandit 许可证密钥。对于此技能,许可证产品为 native,许可证平台为 android。
按以下顺序操作——切勿因 MCP 阻碍用户:
-
Scandit MCP 服务已连接——调用
ensure_scanner_setup,并设置产品native、平台android、app_identifier(应用的 bundle ID 或 application ID;对于 Web 应用,填写其生产域名,绝不能使用localhost)以及环境变量SCANDIT_LICENSE_KEY。不要运行它返回的命令。然后使用结果中的密钥 ID,或从list_license_keys获取密钥 ID,再调用get_license_key;如果list_license_keys显示密钥不是试用密钥,请在获取前征求用户同意。在聊天中最多只能显示掩码预览;绝不能输出完整密钥。 -
MCP 服务未连接——只告知用户一次:他们可以在自己的 MCP 客户端中连接远程 Scandit MCP 服务
https://ssl.scandit.com/mcp,然后从第 1 步继续。不要自行修改 MCP 客户端配置。身份验证需要通过浏览器进行,因此不支持无头环境或 CI。该服务仅提供试用密钥;绝不会创建、撤销或修改生产许可证。
-
用户拒绝或没有 MCP 客户端——请他们自行前往 https://ssl.scandit.com 生成密钥(尚无账户时,可前往 https://ssl.scandit.com/dashboard/sign-up?p=test),然后粘贴密钥。
然后将密钥写入代码:在许可证密钥调用中,将占位符替换为 get_license_key 返回的密钥,或用户粘贴或提供的密钥;在聊天中仍然只显示掩码预览。不要搜索项目、项目文件或环境中的密钥。
参考资料
根据用户的问题,为其提供相应的资源:
| 主题 | 资源 |
|---|---|
| 入门 | 入门 · 示例 |
| 高级主题(自定义反馈、取景器、位置选择、扫描意图、复合码) | 高级配置 |
| 主版本 SDK 之间的迁移 | 6 → 7 · 7 → 8 |
| 完整 API 参考 | BarcodeCapture API |