在之前的文章,我已经写过了一篇关于扫描枪数据获取通常处理的文章,大家有兴趣的话可以参看
PDA扫描获取内容的通常处理
但此方式在实际运用中,有一个不方便的地方,那就是要想监听扫描枪的内容,我们必须在布局中隐式布局一个输入框,我最近开发的app是运行在定制版的Android设备上的,在涉及到获取扫描枪内容的时候,竟然还出现部分设备无法扫描获取数据的情况。
基于以上弱点的考虑,于是有了这篇文章。
今天涉及的知识有:
- BarcodeScannerResolver 使用介绍
- BarcodeScannerResolver 在 Activity 中使用
- 效果图和项目结构图
- BarcodeScannerResolver 源码
先来波效果图
![](https://img.haomeiwen.com/i6127340/871ab2f14f3d1911.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")
}
}
})
}
重写Activity
的dispatchKeyEvent()
或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 中使用
下面给出BarcodeScannerResolver
在Activity
中使用示例:
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()
}
}
三.效果图和项目结构图
![](https://img.haomeiwen.com/i6127340/871ab2f14f3d1911.gif)
![](https://img.haomeiwen.com/i6127340/c4fb1a12351761d6.png)
四. BarcodeScannerResolver 源码
下面贴出BarcodeScannerResolver
源码:
网友评论