android中如何通过扫码枪读取手机二维码
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了android中如何通过扫码枪读取手机二维码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.引入扫码设备辅助类pu
千家信息网最后更新 2026年11月03日android中如何通过扫码枪读取手机二维码
这篇文章主要介绍了android中如何通过扫码枪读取手机二维码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
1.引入扫码设备辅助类
public class ScanGunKeyEventHelper { private final static long MESSAGE_DELAY = 500; //延迟500ms,判断扫码是否完成。 private StringBuffer mStringBufferResult; //扫码内容 private boolean mCaps; //大小写区分 private final Handler mHandler; private final BluetoothAdapter mBluetoothAdapter; private final Runnable mScanningFishedRunnable; private OnScanSuccessListener mOnScanSuccessListener; private String mDeviceName; public ScanGunKeyEventHelper(OnScanSuccessListener onScanSuccessListener) { mOnScanSuccessListener = onScanSuccessListener ; mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mStringBufferResult = new StringBuffer(); mHandler = new Handler(); mScanningFishedRunnable = new Runnable() { @Override public void run() { performScanSuccess(); } }; } /** * 返回扫码成功后的结果 */ private void performScanSuccess() { String barcode = mStringBufferResult.toString(); if (mOnScanSuccessListener != null) mOnScanSuccessListener.onScanSuccess(barcode); mStringBufferResult.setLength(0); } /** * 扫码枪事件解析 * @param event */ public void analysisKeyEvent(KeyEvent event) { int keyCode = event.getKeyCode(); //字母大小写判断 checkLetterStatus(event); if (event.getAction() == KeyEvent.ACTION_DOWN) { char aChar = getInputCode(event);; if (aChar != 0) { mStringBufferResult.append(aChar); } if (keyCode == KeyEvent.KEYCODE_ENTER) { //若为回车键,直接返回 mHandler.removeCallbacks(mScanningFishedRunnable); mHandler.post(mScanningFishedRunnable); } else { //延迟post,若500ms内,有其他事件 mHandler.removeCallbacks(mScanningFishedRunnable); mHandler.postDelayed(mScanningFishedRunnable, MESSAGE_DELAY); } } } //检查shift键 private void checkLetterStatus(KeyEvent event) { int keyCode = event.getKeyCode(); if (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT || keyCode == KeyEvent.KEYCODE_SHIFT_LEFT) { if (event.getAction() == KeyEvent.ACTION_DOWN) { //按着shift键,表示大写 mCaps = true; } else { //松开shift键,表示小写 mCaps = false; } } } //获取扫描内容 private char getInputCode(KeyEvent event) { int keyCode = event.getKeyCode(); char aChar; if (keyCode >= KeyEvent.KEYCODE_A && keyCode <= KeyEvent.KEYCODE_Z) { //字母 aChar = (char) ((mCaps ? 'A' : 'a') + keyCode - KeyEvent.KEYCODE_A); } else if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) { //数字 aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_0); } else { //其他符号 switch (keyCode) { case KeyEvent.KEYCODE_PERIOD: aChar = '.'; break; case KeyEvent.KEYCODE_MINUS: aChar = mCaps ? '_' : '-'; break; case KeyEvent.KEYCODE_SLASH: aChar = '/'; break; case KeyEvent.KEYCODE_BACKSLASH: aChar = mCaps ? '|' : '\\'; break; default: aChar = 0; break; } } return aChar; } public interface OnScanSuccessListener { void onScanSuccess(String barcode); } public void onDestroy() { mHandler.removeCallbacks(mScanningFishedRunnable); mOnScanSuccessListener = null; } //部分手机如三星,无法使用该方法// private void hasScanGun() {// Configuration cfg = getResources().getConfiguration();// return cfg.keyboard != Configuration.KEYBOARD_NOKEYS;// } // /**// * 扫描枪是否连接// * @return// */// public boolean hasScanGun() {//// if (mBluetoothAdapter == null) {// return false;// }//// Set blueDevices = mBluetoothAdapter.getBondedDevices();//// if (blueDevices == null || blueDevices.size() <= 0) {// return false;// }//// for (Iterator iterator = blueDevices.iterator(); iterator.hasNext(); ) {// BluetoothDevice bluetoothDevice = iterator.next();//// if (bluetoothDevice.getBluetoothClass().getMajorDeviceClass() == BluetoothClass.Device.Major.PERIPHERAL) {// mDeviceName = bluetoothDevice.getName();// return isInputDeviceExist(mDeviceName);// }//// }//// return false;//// } /** * 输入设备是否存在 * @param deviceName * @return */ private boolean isInputDeviceExist(String deviceName) { int[] deviceIds = InputDevice.getDeviceIds(); for (int id : deviceIds) { if (InputDevice.getDevice(id).getName().equals(deviceName)) { return true; } } return false; } /** * 是否为扫码枪事件(部分机型KeyEvent获取的名字错误) * @param event * @return */ @Deprecated public boolean isScanGunEvent(KeyEvent event) { return event.getDevice().getName().equals(mDeviceName); } } 2. active里面实现代理方法
//实现上述类接口'public class MainActivity extends AppCompatActivity implements ScanGunKeyEventHelper.OnScanSuccessListener//重写扫码枪识别返回数据@Override public void onScanSuccess(String barcode) { barCode = barcode; if (barcode != null && recordPrice > 0 && payString.equals ("readyPay")) { payDishs(); } } //重写捕捉到扫码枪事件 @Override public boolean dispatchKeyEvent(KeyEvent event) { mScanGunKeyEventHelper.analysisKeyEvent(event); return true; }dispatchKeyEvent里面分发事件一定设置 return true,否则扫码枪事件传递到屏幕其他按钮上
感谢你能够认真阅读完这篇文章,希望小编分享的"android中如何通过扫码枪读取手机二维码"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
事件
篇文章
手机
二维
二维码
内容
大小
方法
设备
部分
延迟
成功
价值
兴趣
同时
名字
回车键
大写
字母
小写
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技小贷
万易互联网科技有限公司
互联网与未来科技
浩特互联网科技
华脉科技工业互联网产品
哈尔滨秒房互联网科技有限公司
宁波青枫互联网科技有限公司
以后互联网后是啥科技
南平创想时代互联网科技有限公司
互联网科技研发水平
互联网公司黑科技创始人
互联网科技如何创业
南博望互联网科技有限公司
保险科技服务互联网营销体系
区块链结合互联网科技
深圳互联网科技的发展
皮皮虾互联网科技有限公司
互联网科技资金流入
广州互联网高科技取餐柜
济南小医互联网科技有限公司招聘
湖北九亚互联网络科技有限公司
科技赋能下的互联网金融
九亚互联网科技
互联网科技公司的市场部门
恒银科技与互联网金融
承德科技产业互联网发展
现代互联网科技股
世界互联网领先科技成果获奖
绵阳真晨互联网科技有限公司
陕西彩京云互联网科技有限公司