前言
在Android
开发过程中我们会遇到获取扫描枪扫描内容的问题。之前也讲过一篇关于获取扫描枪扫描内容的文章,大家有兴趣的可参考以下文章
Android监听扫描枪内容(一)
以上那片文章的话,可以获取到扫描枪扫描的数据,但是当界面中含有按钮的时候,会自动触发按钮点击事件,为了解决这个问题,这篇文章,让我们学习一个新的获取扫描数据的帮助类——ScanGun
,今天就来讲讲它的使用吧
今天涉及内容:
- ScanGun 使用简介
- ScanGun 在 Activity 中的使用
- 效果图和项目结构图
- ScanGun 源码
先来波效果图:
![](https://img.haomeiwen.com/i6127340/1f0b3a4a11593029.gif)
一. ScanGun 使用简介
ScanGun
作为一个获取扫描枪扫描结果的监听类,我们在Activity
中使用之前,要先声明对象并初始化,类似下面这样:
//声明对象
private var mScanGun: ScanGun? = null
//初始化对象
mScanGun = ScanGun()
然后在Activity
的 onCreate(savedInstanceState: Bundle?)
方法中,监听扫描枪扫描结果:
//扫描监听
mScanGun!!.setMaxKeysInterval(100)
.setOnScanGunCallBack(object:ScanGun.ScanGunCallBack{
override fun onScanFinish(code: String) {
//获取扫描值
LogUtil.i("=====获取扫描值====$code")
toast("=====获取扫描值======$code")
}
})
这里,setMaxKeysInterval
是设置扫描解析时长,单位为毫秒。为了更准确的获取到扫描信息,我们一般设置时长为 100-500 毫秒之间。
要扫描获取数据,我们还需要重写Activity
的onKeyDown(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 中的使用
下面,让我们来看看ScanGun
在Activity
中的使用代码:
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
}
}
三. 效果图和项目结构图
![](https://img.haomeiwen.com/i6127340/1f0b3a4a11593029.gif)
![](https://img.haomeiwen.com/i6127340/77e431c5a025a4f0.png)
四.ScanGun 源码
下面来看看 ScanGun
源码:
网友评论