美文网首页
Android监听扫描枪内容(二)

Android监听扫描枪内容(二)

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

前言

Android开发过程中我们会遇到获取扫描枪扫描内容的问题。之前也讲过一篇关于获取扫描枪扫描内容的文章,大家有兴趣的可参考以下文章
Android监听扫描枪内容(一)
以上那片文章的话,可以获取到扫描枪扫描的数据,但是当界面中含有按钮的时候,会自动触发按钮点击事件,为了解决这个问题,这篇文章,让我们学习一个新的获取扫描数据的帮助类——ScanGun,今天就来讲讲它的使用吧

今天涉及内容:

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

先来波效果图:


2.gif

一. ScanGun 使用简介

ScanGun作为一个获取扫描枪扫描结果的监听类,我们在Activity中使用之前,要先声明对象并初始化,类似下面这样:

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

然后在ActivityonCreate(savedInstanceState: Bundle?)方法中,监听扫描枪扫描结果:

        //扫描监听
        mScanGun!!.setMaxKeysInterval(100)
            .setOnScanGunCallBack(object:ScanGun.ScanGunCallBack{
                override fun onScanFinish(code: String) {
                    //获取扫描值
                    LogUtil.i("=====获取扫描值====$code")

                    toast("=====获取扫描值======$code")
                }
            })

这里,setMaxKeysInterval是设置扫描解析时长,单位为毫秒。为了更准确的获取到扫描信息,我们一般设置时长为 100-500 毫秒之间。
要扫描获取数据,我们还需要重写ActivityonKeyDown(keyCode: Int, event: KeyEvent)dispatchKeyEvent(event: KeyEvent)方法,类似下面这样:

    /**重写返回键**/
    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        mScanGun!!.isMaybeScanning(keyCode, event)
        return super.onKeyDown(keyCode, event)
    }

    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
        // 拦截物理键盘事件
        if (event.keyCode > 6) {
            if (event.action == KeyEvent.ACTION_DOWN) {
                if (event.keyCode == KeyEvent.KEYCODE_DEL) {//将键盘的删除键传递下去
                    return super.dispatchKeyEvent(event)
                }
                this.onKeyDown(event.keyCode, event)
            }
        } else {
            if (event.keyCode == KeyEvent.KEYCODE_BACK) {//将键盘的返回事件传递下去
                return super.dispatchKeyEvent(event)
            }
        }
        return true
    }

这样,我们就能在扫描的时候,获取到扫描值了。

二.ScanGun 在 Activity 中的使用

下面,让我们来看看ScanGunActivity中的使用代码:

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

    //声明对象
    private var mScanGun: ScanGun? = null

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

        initData()
        setListener()
    }

    private fun initData() {
        //初始化对象
        mScanGun = ScanGun()
    }

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

        //扫描监听
        mScanGun!!.setMaxKeysInterval(100)
            .setOnScanGunCallBack(object:ScanGun.ScanGunCallBack{
                override fun onScanFinish(code: String) {
                    //获取扫描值
                    LogUtil.i("=====获取扫描值====$code")

                    toast("=====获取扫描值======$code")
                }
            })
    }

    override fun onClick(v: View) {

    }

    /**重写返回键**/
    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        mScanGun!!.isMaybeScanning(keyCode, event)
        return super.onKeyDown(keyCode, event)
    }

    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
        // 拦截物理键盘事件
        if (event.keyCode > 6) {
            if (event.action == KeyEvent.ACTION_DOWN) {
                if (event.keyCode == KeyEvent.KEYCODE_DEL) {//将键盘的删除键传递下去
                    return super.dispatchKeyEvent(event)
                }
                this.onKeyDown(event.keyCode, event)
            }
        } else {
            if (event.keyCode == KeyEvent.KEYCODE_BACK) {//将键盘的返回事件传递下去
                return super.dispatchKeyEvent(event)
            }
        }
        return true
    }

}

三. 效果图和项目结构图

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

四.ScanGun 源码

下面来看看 ScanGun 源码:

相关文章

网友评论

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

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