现象描述:
1.PDA等设备扫描头有时候会过于灵敏,导致短时间内重复识别。
2. EditText 的 actionUnspecified 属性,回车之后,短时间内会相应两次。导致数据异常。(暂不清楚是设备导致的,还是控件导致的)
处理思路:
1.首次扫描到的条码直接返回,不做处理
2.500ms内,重复扫描到的条码舍弃,超过500ms扫描到的条码,依旧读取
思路就是这么简单,在获取条码之后调用此方法,就可以实现500ms内重复条码的过滤了。
具体的处理方式如下图所示:
public class CommonUtil {
private static long exitTime = 0;
//解决重复扫描定义的变量
private static String tempCode = "";
/**
* 获取实际的code
*
* @param barcode
* @return
*/
public static String getScanCode(String barcode) {
if (!TextUtils.isEmpty(barcode)) {
if ((System.currentTimeMillis() - exitTime) < 500) {
if (tempCode.equals(barcode.trim())) {
Log.d("scanResult+不做处理", barcode.trim());
// CommonUtil.showToast(getApplicationContext(),"aaa");
//不做处理
return "";
} else {
//条码不一样,可以处理
tempCode = barcode.trim();
Log.d("scanResult", barcode.trim());
}
exitTime = System.currentTimeMillis();
} else {
tempCode = barcode.trim();
Log.d("scanResult", barcode.trim());
exitTime = System.currentTimeMillis();
}
}
return tempCode;
}
}