一、参考

1、常用keycode

一、简述

1、设备:扫码枪其实相当于一个物理输入设备,如果软键盘打开的话能明显感觉到其内容在输入

2、问题:

2.1、不能扫出中文来(可能和扫码枪设备,配置有关系)

2.2、在光标放到输入框有软键盘弹出的时候,扫码出来的字符顺序是混乱的(估计和硬件有关系)

2.3、没有合适的监听扫码结果的api

三、解决

为了解决以上问题另加上实现各种业务,故而研究下,有这么几点:

1、一定需要一个EditText(充当扫码枪输入的容器)

2、有弹出软键盘的,扫码内容可能会顺序不对和乱码,需要关闭软键盘,内容正确

3、扫码出来后,一般扫码枪是有标识符结束的,一般是键盘上的

keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()==KeyEvent.ACTION_DOWN

返回当前扫码内容

4、最后会有KeyEvent.KEYCODE_DPAD_DOWN,到其他view上去

5、还没能解决如何设置timeout问题,让接口提示扫码失败  ̄□ ̄||

代码

/**

* Created by wujn on 2018/4/19.

* Version : v1.0

* Function: android hardware device - Scanner

*

* 扫码枪:相当于软键盘使用的

* 1、一定需要一个EditText(充当扫码枪输入的容器)

* 2、有弹出软键盘的,扫码内容可能会顺序不对和乱码,需要关闭软键盘,内容正确

* 3、扫码出来后,一般扫码枪是有标识符结束的,一般是键盘上的

* keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()==KeyEvent.ACTION_DOWN

* 返回当前扫码内容

* 4、最后会有KeyEvent.KEYCODE_DPAD_DOWN,到其他view上去

* 5、还没能解决如何设置timeout问题,让接口提示扫码失败

*/

public class Scanner {

private Activity activity;

public Scanner(Activity activity){

this.activity = activity;

}

/**

* 显示的/隐藏的 EditText 获得光标,准备扫码

* */

public void scan(final EditText editText){

//获得光标

editText.setFocusable(true);

editText.setFocusableInTouchMode(true);

editText.requestFocus();

//关闭软键盘:防止顺序乱码

InputMethodManager manager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);

//View focus = act.getCurrentFocus();

manager.hideSoftInputFromWindow(

//focus == null ? null : focus.getWindowToken(),

editText == null ? null : editText.getWindowToken(),

InputMethodManager.HIDE_NOT_ALWAYS);

//增加软键盘监听,扫出来内容会自己填充到editText中去的

editText.setOnKeyListener(new View.OnKeyListener() {

//on scan finish , last 3 KeyEvent log

//keycode=66,event.getAction()=0 -> 66=KeyEvent.KEYCODE_ENTER=换行 , 1=KeyEvent.ACTION_DOWN=按下

//keycode=66,event.getAction()=1 -> 66=KeyEvent.KEYCODE_ENTER=换行 , 1=KeyEvent.ACTION_UP=抬起

//keycode=20,event.getAction()=0 -> 20=KeyEvent.KEYCODE_DPAD_DOWN=按键按下 , 1=KeyEvent.ACTION_DOWN=按下

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

//LogUtil.i("keycode="+keyCode+",event.getAction()="+event.getAction());

if(keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()==KeyEvent.ACTION_DOWN){

onScanResultCallBack.OnScanSucccess(editText.getText().toString());//返回结果值,看需要使用了

return true;

}

return false;

}

});

}

/**

* 扫码枪接口:有timeout设置,当然光标移除的时候关闭计时

* 成功 返回扫码结果

* 失败 返回错误信息

* */

public interface OnScanResultCallBack{

public void OnScanSucccess(String result);

public void OnScanFail(String errorMsg);

}

private OnScanResultCallBack onScanResultCallBack = new OnScanResultCallBack(){

@Override

public void OnScanSucccess(String result) {}

@Override

public void OnScanFail(String errorMsg) {}

};

/**

* 子类实现回调函数

* */

public void setOnScanResultCallBack(Scanner.OnScanResultCallBack onScanResultCallBack) {

if (onScanResultCallBack == null) throw new IllegalArgumentException("empty onScanResultCallBack");

this.onScanResultCallBack = onScanResultCallBack;

}

}

对实际业务其实根本不用扫出来的结果,结果是个url,需要访问后获得infobean才是最后有效的信息,这个业务可以用个0dp的EditText当做容器,扫出结果后返回到callback里,然后后续就xxx。

大家有好的方法做timeout么,是EditText获得光标后开始计时?万一客户就是不扫描呢?不用EditText行不行,随时随地可以扫描?

怎么搞啊!!没思路,蛋疼!!广大码友,有推荐的解决方案可以贴出来。

 ̄へ ̄

android 扫描枪封装,Android 扫码枪监听封装相关推荐

  1. php 监听条码枪输入,使用jQuery监听扫码枪输入并禁止手动输入的实现方法

    @(知识点总结)[jquery|扫码抢] 基于jQuery的扫码枪监听.如果只是想实现监听获取条码扫码信息,可以直接拿来使用,如果有更多的条码判断处理逻辑需要自己扩展. 一.功能需求 使用扫码枪扫描条 ...

  2. 扫描枪在Android 系统上面扫描的时候缺少一位,已解决百度输入法的问题

    问题描述: 扫描枪在Android 系统上面扫描的时候缺少一位, 在我们的系统中,当扫描枪扫描条码值"I-13388887777" 这样的条码的时候,总是缺少一位--手机号的第一位 ...

  3. Android事件的响应,Android 开发事件响应之基于监听的事件响应

    Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事 ...

  4. Android广播接实现电话的监听(电话的状态,拦截)

    Android广播接实现电话的监听 1:需要在AndroidManifest.xml清单中添加权限 <uses-permission android:name="android.per ...

  5. Android RecyclerView(九)滑动监听综述

    Android RecyclerView(九)滑动监听 1 RecyclerView 的滑动监听 1.1 RecyclerView 设置滑动监听 mRecyclerView.setOnScrollLi ...

  6. Android实现来电和去电的监听

    写个实例实现Android中来电和去电的监听,来电可以使用PhoneStateListener对电话状态的改变进行监听,去电需要动态或者静态去注册广播接收器,对去电进行监听: 来电: 来电所对应的三种 ...

  7. Android中自定义ScrollView的滑动监听事件,并在滑动时渐变标题栏背景颜色

    效果图 滑动前: 滑动中: 滑动到底部: 项目结构 ObservableScrollView package com.jukopro.titlebarcolor;import android.cont ...

  8. php 监听条码枪输入,运用jQuery监听扫码枪输入并制止手动输入的完成要领

    基于jQuery的扫码枪监听.假如只是想完成监听猎取条码扫码信息,能够直接拿来运用,假如有更多的条码推断处置惩罚逻辑须要本身扩大. 一.功用需求 运用扫码枪扫描条码,在一个web页面监听猎取扫码枪的数 ...

  9. php 监听条码枪输入,使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)...

    基于jQuery的扫码枪监听.如果只是想实现监听获取条码扫码信息,可以直接拿来使用,如果有更多的条码判断处理逻辑需要自己扩展. 一.功能需求 使用扫码枪扫描条码,在一个web页面监听获取扫码枪的数据, ...

最新文章

  1. mysql copy pending_mysql 案例 ~ 主从复制延迟之并行复制
  2. 用存储过程还原数据库
  3. 利用SCVMM 2012 R2来管理Azure虚拟机
  4. 苹果系统更新服务器繁忙,如何解决升级MacOS 10.13时的常见问题
  5. MapReduce论文
  6. 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法
  7. 放大你的Rstudio窗口字体
  8. android交叉编译工具链,NDK 交叉编译工具链使用
  9. Java项目--网页版音乐播放器(JQuery前端逻辑)
  10. Vue中图片裁剪的实现
  11. macOS safari安装第三方插件
  12. CAD-CASS免费增强测绘工具CASS++
  13. 佛蒙特大学给机器人口述「形态学」,使其「理解」人类指令
  14. 《机器学习实战》笔记——第四章:基于概率论的分类方法:朴素贝叶斯
  15. Nginx 使用 ngx_http_mirror_module 模块 复制 http请求流量
  16. 小蛋机器人app_阿尔法蛋编程APP
  17. 计算机一级ps考级知识,Photoshop等级考试一级大纲
  18. Cisco(64)——路由策略综合
  19. 原来路由器也属于消耗品
  20. qduoj 韬韬说做出这个泥萌就AK辣

热门文章

  1. Open3d学习计划——2(使用帮助与IO)
  2. 卖座网项目2流程解析
  3. VueCompilerError: v-html will override element children.
  4. Maven 环境踩坑及完整配置
  5. Rancid+Subversion (SVN)管理Cisco配置
  6. Flappy Bird 恶意程序详细分析
  7. python——wxpy模块实现微信尬聊(基于图灵机器人)
  8. Codeforces Gym 101142 G Gangsters in Central City (lca+dfs序+树状数组+set)
  9. 《Python高手之路(第3版)》——1.5 Joshua Harlow访谈
  10. 达人评测 天玑1100和骁龙888哪个处理器好