2019年04月12日更新,根据评论区反馈,可能不是很好用(但是我当时用的时候就是这么实现的),可以选择性尝试
Android 无 EditText 情况下接受扫码枪扫描数据
简单无脑!
去下载个 Jar 包
要求不显示 EditText ,我使用一个 View 将 SearchView 盖起来,是可以实现页面显示时看不到输入框的,但是 SearchView 获取焦点后弹出软键盘这个很恶心。这个方式走到最后还是遇到一个bug解决不了:当前页面A跳转到下一个页面B,在B页面中,点击系统的返回键,回到A页面,A页面的 SearchView 就不会获得焦点了(手动给焦点又会弹出软键盘)。如果在 B 中点击我们自己写的 Button ,finish掉 B,回到A的时候 EditText 又能获得焦点。
如何使用
1,将 Jar 包添加进 AS
2,在 Activity 中创建成员变量 ScanGun
scanGun = new ScanGun(new ScanGun.ScanGunCallBack() {
@Override
public void onScanFinish(String s) {
//这里的回调函数的参数s
//就是扫码枪扫到的那一串字符串
//TODO 按照你自己的逻辑处理
}
});
3,重写 Activity
的 boolean onKeyDown(int keyCode, KeyEvent event)
方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//我们需要的内容肯定是大于6的
//比如用户点击返回键,keyCode就是小于6的,这类的我们不需要
if (keyCode <= 6) {
return super.onKeyDown(keyCode, event);
}
return scanGun.isMaybeScanning(keyCode, event) || super.onKeyDown(keyCode, event);
}
4,上述三部无法实现的话,根据评论区小伙伴提供了如下代码(我没测试)
String barcode ="";
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getAction()==KeyEvent.ACTION_DOWN){
Log.e(TAG,"dispatchKeyEvent: "+event.toString());
char pressedKey = (char) event.getUnicodeChar();
barcode += pressedKey;
}
if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
Toast.makeText(getApplicationContext(),
"barcode--->>>" + barcode, Toast.LENGTH_LONG)
.show();
qrEditText.setText(barcode);
barcode="";
}
return super.dispatchKeyEvent(event);
}