当前位置: 首页 > news >正文

适配扫描枪

C:\projects_rust\sgbstock\sgbstock\android\app\src\main\kotlin\com\sgbstock\sgbstock\MainActivity.kt

 

package com.sgbstock.sgbstockimport android.content.IntentFilter
import android.util.Log
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.EventChannelclass MainActivity : FlutterActivity() {companion object {private const val TAG = "MainActivity"private const val CHANNEL = "barcode_scanner/event"}private lateinit var eventSink: EventChannel.EventSinkprivate lateinit var barcodeReceiver: BarcodeBroadcastReceiveroverride fun configureFlutterEngine(flutterEngine: FlutterEngine) {super.configureFlutterEngine(flutterEngine)// Initialize EventChannelval channel = EventChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)channel.setStreamHandler(object : EventChannel.StreamHandler {override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {Log.d(TAG, "EventChannel onListen")eventSink = events!!registerBroadcastReceiver()}override fun onCancel(arguments: Any?) {Log.d(TAG, "EventChannel onCancel")unregisterBroadcastReceiver()}})}private fun registerBroadcastReceiver() {// Create broadcast receiver with callbackbarcodeReceiver = BarcodeBroadcastReceiver {sendBarcodeToFlutter(it)}// Create intent filter for barcode scanner broadcastsval filter = IntentFilter()filter.addAction("com.android.decodewedge.decode_action")filter.addAction("com.symbol.datawedge.api.NOTIFICATION_ACTION")filter.addAction("com.zebra.scan.service.BARCODE_DECODED")filter.addAction("com.sunmi.scanner.ACTION_DATA_CODE_RECEIVED")filter.addAction("com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST")// Register broadcast receiverregisterReceiver(barcodeReceiver, filter)Log.d(TAG, "Broadcast receiver registered")}private fun unregisterBroadcastReceiver() {try {unregisterReceiver(barcodeReceiver)Log.d(TAG, "Broadcast receiver unregistered")} catch (e: Exception) {Log.e(TAG, "Error unregistering receiver: ${e.message}")}}private fun sendBarcodeToFlutter(barcode: String) {if (::eventSink.isInitialized) {Log.d(TAG, "Sending barcode to Flutter: $barcode")eventSink.success(mapOf("barcode" to barcode))}}override fun onDestroy() {super.onDestroy()// Ensure broadcast receiver is unregisteredtry {unregisterBroadcastReceiver()} catch (e: Exception) {// Ignore if already unregistered}}
}

  

 

C:\projects_rust\sgbstock\sgbstock\android\app\src\main\kotlin\com\sgbstock\sgbstock\BarcodeBroadcastReceiver.kt

 

package com.sgbstock.sgbstockimport android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Logclass BarcodeBroadcastReceiver(private val callback: (String) -> Unit) : BroadcastReceiver() {companion object {private const val TAG = "BarcodeBroadcastReceiver"// Common broadcast actions for barcode scannersprivate val ACTIONS = arrayOf("com.android.decodewedge.decode_action","com.symbol.datawedge.api.NOTIFICATION_ACTION","com.zebra.scan.service.BARCODE_DECODED","com.sunmi.scanner.ACTION_DATA_CODE_RECEIVED","com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST")}override fun onReceive(context: Context, intent: Intent) {val action = intent.actionLog.d(TAG, "Received broadcast: $action")// Try to extract barcode from common intent extrasval barcode = extractBarcode(intent)if (barcode.isNotEmpty()) {Log.d(TAG, "Extracted barcode: $barcode")callback(barcode)}}private fun extractBarcode(intent: Intent): String {// Try common extra keys for barcode dataval extras = intent.extrasif (extras != null) {// Common keys for barcode dataval barcodeKeys = arrayOf("com.android.decode.intentwedge.barcode_string","com.android.decode.intentwedge.barcode_data","com.symbol.datawedge.data_string","com.zebra.scan.service.BARCODE","data","source_byte","EXTRA_BARCODE_DECODING_DATA")for (key in barcodeKeys) {val value = extras.getString(key)if (value != null && value.isNotEmpty()) {return value}}// Also try getStringExtra directlyfor (key in barcodeKeys) {val value = intent.getStringExtra(key)if (value != null && value.isNotEmpty()) {return value}}}return ""}
}

  

http://www.jsqmd.com/news/612091/

相关文章:

  • 【完整源码+数据集+部署教程】番茄病害检测检测系统源码 [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
  • 智能图书借阅管理系统
  • LLM Security Engineer:2026 北美薪资天花板的“隐藏入口”
  • 3个模块+1个快速通道:彻底解决macOS上Fiji启动失败的终极指南
  • 开发环境救星:用gemma-3-12b-it为OpenClaw打造智能调试助手
  • Simula Arduino库:面向机器人开发的行为树嵌入式框架
  • 忍者像素绘卷入门必看:理解‘圣洁像素美学’设计语言与用户体验关系
  • 告别审稿追踪焦虑:Elsevier Tracker如何帮我每月节省6小时学术管理时间
  • 破解软件供应链管理困局:企业级制品管理体系建设实践指南
  • PETRv2-BEV企业级部署指南:SpringBoot微服务集成
  • AIGlasses_for_navigation与MySQL数据库交互:导航日志存储与查询分析
  • C语言结构体详解:复杂数据处理必备,零基础也能看懂
  • FaceFusion小白教程:零基础学会换脸,支持卡通脸一键替换
  • Oracle OCP 19c(1Z0-082 + 1Z0-083)最全面、考试必背、生产必用命令大全
  • PC-DMIS报告模板的深度解析与实战定制指南
  • 从B站视频到毕业设计:三相四桥臂的三种主流控制方案到底怎么选?(MPC/3D-SVPWM/载波调制深度对比)
  • 超轻量模型安全加固:DeepSeek-R1-Distill-Qwen-1.5B输入过滤与越狱防护实践
  • Aravis相机管理库安装避坑指南:从meson升级到GStreamer配置全流程
  • 杰理之A2DP 开关【篇】
  • 北京墨想空间艺术装饰有限公司联系方式查询:高端墙面地面艺术饰面系统服务商的选择参考与使用指南 - 品牌推荐
  • BetterGI原神自动化工具:新手快速上手指南
  • 原神帧率解锁指南:3步突破60FPS限制,释放硬件全部性能!
  • 零代码!SpringBoot+微信测试号实现扫码登录完整指南(避坑版)
  • Lenovo Legion Toolkit:拯救者笔记本性能优化终极指南
  • 小白友好教程:OpenClaw镜像预装Qwen3-14B的浏览器自动化
  • 别再死记硬背了!用Wireshark抓包实战,5分钟搞懂ICMP协议(附Ping/Traceroute分析)
  • 龙虾-OpenClaw一文详细了解-手搓OpenClaw-1
  • 从SSR到DeltaK:群体结构分析的完整流程与可视化实践
  • MTools AI智能工具实测:50页PDF快速摘要,附带原文引用
  • 北京墨想空间艺术装饰有限公司联系方式查询:高端墙面地面艺术饰面系统服务商的合作渠道与选用参考 - 品牌推荐