美文网首页简书付费文章
Android监听扫描枪内容(一)

Android监听扫描枪内容(一)

作者: 奔跑的佩恩 | 来源:发表于2021-01-15 14:23 被阅读0次

在之前的文章,我已经写过了一篇关于扫描枪数据获取通常处理的文章,大家有兴趣的话可以参看
PDA扫描获取内容的通常处理
但此方式在实际运用中,有一个不方便的地方,那就是要想监听扫描枪的内容,我们必须在布局中隐式布局一个输入框,我最近开发的app是运行在定制版的Android设备上的,在涉及到获取扫描枪内容的时候,竟然还出现部分设备无法扫描获取数据的情况。
基于以上弱点的考虑,于是有了这篇文章。

今天涉及的知识有:

  1. BarcodeScannerResolver 使用介绍
  2. BarcodeScannerResolver 在 Activity 中使用
  3. 效果图和项目结构图
  4. BarcodeScannerResolver 源码

先来波效果图


效果图.gif

一. BarcodeScannerResolver 使用介绍

BarcodeScannerResolver是一个监听获取扫描枪内容的类,在使用之前,我们需要初始化此类:

    //声明对象
    private var mBarcodeScannerResolver: BarcodeScannerResolver? = null
        //初始化对象
        mBarcodeScannerResolver = BarcodeScannerResolver()

在 Activity 的 onCreate 方法中监听扫描到的内容

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(com.kotlintest.R.layout.activity_main)

        //扫描监听
        mBarcodeScannerResolver!!.setScanSuccessListener(object :
            BarcodeScannerResolver.OnScanSuccessListener {
            override fun onScanSuccess(barcode: String) {
                if (barcode.isNullOrBlank()) {
                    toast("=======扫描为空========")
                } else {
                    toast("=====扫描结果为:$barcode")
                }
            }
        })
    }

重写ActivitydispatchKeyEvent()onKeyDown(),然后在方法中调用resolveKeyEvent(),这里我以重写onKeyDown()方法为例:

    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        mBarcodeScannerResolver!!.resolveKeyEvent(event)
        return super.onKeyDown(keyCode, event)
    }

然后在使用完毕后,移除BarcodeScannerResolver的监听:

    override fun onDestroy() {
        mBarcodeScannerResolver!!.removeScanSuccessListener()
        super.onDestroy()
    }

二.BarcodeScannerResolver 在 Activity 中使用

下面给出BarcodeScannerResolverActivity中使用示例:

open class MainActivity : AppCompatActivity(), View.OnClickListener {

    //声明对象
    private var mBarcodeScannerResolver: BarcodeScannerResolver? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(com.kotlintest.R.layout.activity_main)

        initData()
        setListener()
    }

    private fun initData() {
        //初始化对象
        mBarcodeScannerResolver = BarcodeScannerResolver()
    }

    private fun setListener() {
        mBtnTest.setOnClickListener(View.OnClickListener {
            //            toast("=====han")
        })

        //扫描监听
        mBarcodeScannerResolver!!.setScanSuccessListener(object :
            BarcodeScannerResolver.OnScanSuccessListener {
            override fun onScanSuccess(barcode: String) {
                if (barcode.isNullOrBlank()) {
                    toast("=======扫描为空========")
                } else {
                    toast("=====扫描结果为:$barcode")
                }
            }
        })
    }

    override fun onClick(v: View) {

    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        mBarcodeScannerResolver!!.resolveKeyEvent(event)
        return super.onKeyDown(keyCode, event)
    }

    override fun onDestroy() {
        mBarcodeScannerResolver!!.removeScanSuccessListener()
        super.onDestroy()
    }
}

三.效果图和项目结构图

效果图.gif
项目结构图.png

四. BarcodeScannerResolver 源码

下面贴出BarcodeScannerResolver 源码:

相关文章

网友评论

    本文标题:Android监听扫描枪内容(一)

    本文链接:https://www.haomeiwen.com/subject/tsbvaktx.html