扫码枪是如何工作的,安卓如何怎么获取扫码枪的内容。本文将介绍安卓获取和处理商米收银机扫码枪扫描后的内容。包括:“安卓开发获取扫码枪扫描后的内容”、“处理扫码枪扫描后的内容”、“在Fragment中使用ScanGun类”。
1、安卓开发获取扫码枪扫描后的内容。
扫码枪会将扫描出来的内容转化为键盘事件KeyEvent,所以我们在fragment类中重写onKeyDownChild方法,就可以捕获扫码事件,进而获取扫码内容:
public void onKeyDownChild(int keyCode, KeyEvent event) {
log.info("---------------------------------onKeyDown: KeyCode:" + keyCode + "------event:" + event + "------------------------------------");
scanGun.isMaybeScanning(keyCode, event);
}
2、处理扫码枪扫描后的内容。
SanGun类定义一个isMayBeScanning方法,扫码枪扫描后触发键盘事件,在键盘事件中调用isMayBeScanning方法,进而解析获取扫码内容:
查看代码
package com.bx.erp.helper;
import android.view.KeyEvent;
import org.apache.log4j.Logger;
public class ScanGun {
private Logger log = Logger.getLogger(this.getClass());
/**
* 默认按键之间时间间隔
*/
public final static int MAX_KEYS_INTERVAL_DEFAULT = 200;
private long currentTime = 0;
private boolean isKeySHIFT = false;
private StringBuilder stringBuilder = new StringBuilder();
private ScanGunCallBack callBack = null;
private static int maxKeysInterval = MAX_KEYS_INTERVAL_DEFAULT;
/**
* 设置按键事件的最大时间间隔(部分扫描枪稍大,建议范围20--100)
*
* @param interval 时间间隔
*/
public static void setMaxKeysInterval(int interval) {
maxKeysInterval = interval;
}
public ScanGun(ScanGunCallBack callBack) {
this.callBack = callBack;
}
public ScanGun() {}
public boolean isMaybeScanning(int keyCode, KeyEvent event) {
log.info("isMaybeScanning--");
log.info("event.getFlags:" + event.getFlags());
if (event.getFlags() != 0x8 && event.getFlags() != 0x6) {
return false;
}
if (currentTime == 0) {
if (stringBuilder.length()