android实现扫码枪功能

作者:cuncaojin 时间:2022-08-28 21:33:35 

扫码枪扫码效果等同于键盘录入,会回调dispatchKeyEvent键盘按下事件。

开发环境:有线扫码枪,支持二维码

代码

1. 接收数据


/**
    * 扫码枪扫码处理
    */
   @Override
   public boolean dispatchKeyEvent(KeyEvent event) {
       if (event.getAction() == KeyEvent.ACTION_DOWN) {
           int keyCode = event.getKeyCode();
           char aChar = (char) event.getUnicodeChar();
           if (aChar != 0) {
               mStringBufferResult.append(aChar);
           }
           mHandler.removeCallbacks(mScanningFishedRunnable);
           //若为回车键,直接返回
           if (keyCode == KeyEvent.KEYCODE_ENTER) {
               mHandler.post(mScanningFishedRunnable);
           } else {
               //延迟post,若500ms内,有其他事件
               mHandler.postDelayed(mScanningFishedRunnable, 500L);
           }
           return true;
       }
       return super.dispatchKeyEvent(event);
   }

2. 处理数据


/**
* 二维码信息对象
*/
  private QRCode qrCodeBean;
  /**
  * 二维码信息原始数据容器
  */
  private StringBuilder mStringBufferResult = new StringBuilder();
  private Handler mHandler = new Handler();

private Runnable mScanningFishedRunnable = new Runnable() {
       @Override
       public void run() {
           scanOk = false;
           String qrcode = mStringBufferResult.toString();
           if (!TextUtils.isEmpty(qrcode)) {
               // 扫码确定参数
               Gson gson = new Gson();
               try {
                   qrCodeBean = gson.fromJson(qrcode, QRCode.class);
                   // 你的代码...
                   // 如果要支持中文,数据用可以URLEncoder/URLDecoder编解码
               } catch (JsonSyntaxException e) {
                   // 解析失败...
               } catch (UnsupportedEncodingException e) {
                   // 解码失败...
               } finally {
                   mStringBufferResult.setLength(0);
               }
           }
       }
   };

参考:Android设备蓝牙连接扫描枪获取扫描内容

来源:https://blog.csdn.net/cuncaojin/article/details/103593984

标签:android,扫码枪
0
投稿

猜你喜欢

  • MyBatis SpringMVC整合实现步骤详解

    2023-02-02 20:33:07
  • C#中const用法详解

    2021-08-12 15:30:29
  • Java 8 Stream操作类型及peek示例解析

    2021-07-17 20:42:08
  • C#基于socket模拟http请求的方法

    2022-09-12 09:55:11
  • 10个Elasticsearch查询的实用技巧分享

    2022-09-21 07:32:14
  • 详解Android 7.0 Settings 加载选项

    2023-07-10 12:35:20
  • Spring Cloud Gateway重试机制的实现

    2023-11-06 01:32:59
  • Android ViewDragHelper完全解析 自定义ViewGroup神器

    2023-04-19 05:56:19
  • 一文详解kafka序列化器和拦截器

    2023-06-18 01:06:08
  • Android 自定义输入支付密码的软键盘实例代码

    2021-08-09 11:41:43
  • 基于C#实现Windows服务状态启动和停止服务的方法

    2022-07-27 12:17:57
  • Android中执行java命令的方法及java代码执行并解析shell命令

    2022-08-27 15:45:13
  • java判断字符串是否有逗号的方法

    2021-11-03 08:01:23
  • 新手了解java IO基础知识

    2023-10-20 22:19:45
  • Android自定义View之自定义评价打分控件RatingBar实现自定义星星大小和间距

    2023-03-14 04:30:16
  • SpringBoot优雅地实现全局异常处理的方法详解

    2023-09-06 09:17:02
  • Java中io流解析及代码实例

    2023-08-22 16:46:48
  • 21天学习android开发教程之SurfaceView

    2023-04-17 17:01:56
  • C#最简单的关闭子窗体更新父窗体的实现方法

    2021-07-24 18:58:27
  • java8新特性将List中按指定属性排序过滤重复数据的方法

    2023-06-16 17:57:42
  • asp之家 软件编程 m.aspxhome.com