日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

安卓开发实现获取扫码枪扫码二维码、条形码后的内容

發布時間:2023/12/14 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓开发实现获取扫码枪扫码二维码、条形码后的内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

掃碼槍是如何工作的,安卓如何怎么獲取掃碼槍的內容。本文將介紹安卓獲取和處理商米收銀機掃碼槍掃描后的內容。包括:“安卓開發獲取掃碼槍掃描后的內容”、“處理掃碼槍掃描后的內容”、“在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() > 0) {stringBuilder = stringBuilder.delete(0, stringBuilder.length());}currentTime = System.currentTimeMillis();} else {if ((System.currentTimeMillis() - currentTime) > maxKeysInterval) {if (stringBuilder.length() > 0) {stringBuilder = stringBuilder.delete(0,stringBuilder.length());}}currentTime = System.currentTimeMillis();}// Shiftif (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT || keyCode == KeyEvent.KEYCODE_SHIFT_LEFT) {if (event.getAction() == KeyEvent.ACTION_DOWN) {//按著shift鍵,表示大寫isKeySHIFT = true;} else {//松開shift鍵,表示小寫isKeySHIFT = false;}}// Enterif (keyCode == KeyEvent.KEYCODE_ENTER) {isKeySHIFT = false;currentTime = 0;if (callBack != null) {log.info("stringBuilder:" + stringBuilder);callBack.onScanFinish(stringBuilder.toString());}return true;}if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {// 數字鍵(鍵盤上方橫條數字,需要考慮Shift)handleTopNumKeys(keyCode);} else if (keyCode >= 29 && keyCode <= 54) {// 字母鍵(需要考慮Shift)wwcheckShift((char) (keyCode + 68), (char) (keyCode + 36));} else if (keyCode >= 144 && keyCode <= 158) {// 數字鍵盤區handleNumPadKeys(keyCode);log.info("數字:" + stringBuilder);} else {// 鍵盤主鍵區其他雙字符鍵位switch (keyCode) {case KeyEvent.KEYCODE_GRAVE: {checkShift(ASCII.CHAR_SIGN_BACKTICK, ASCII.CHAR_SIGN_TILDE);break;}case KeyEvent.KEYCODE_MINUS: {checkShift(ASCII.CHAR_SIGN_MINUS, ASCII.CHAR_SIGN_UNDERSCORE);break;}case KeyEvent.KEYCODE_EQUALS: {checkShift(ASCII.CHAR_SIGN_EQUALS, ASCII.CHAR_SIGN_PLUS);break;}case KeyEvent.KEYCODE_LEFT_BRACKET: {checkShift(ASCII.CHAR_SIGN_BRACKET_LEFT,ASCII.CHAR_SIGN_BRACE_LEFT);break;}case KeyEvent.KEYCODE_RIGHT_BRACKET: {checkShift(ASCII.CHAR_SIGN_BRACKET_RIGHT,ASCII.CHAR_SIGN_BRACE_RIGHT);break;}case KeyEvent.KEYCODE_BACKSLASH: {checkShift(ASCII.CHAR_SIGN_BACKSLASH, ASCII.CHAR_SIGN_BAR);break;}case KeyEvent.KEYCODE_SEMICOLON: {checkShift(ASCII.CHAR_SIGN_SEMICOLON, ASCII.CHAR_SIGN_COLON);break;}case KeyEvent.KEYCODE_APOSTROPHE: {checkShift(ASCII.CHAR_SIGN_QUOTE, ASCII.CHAR_SIGN_DOUBLE_QUOTE);break;}case KeyEvent.KEYCODE_COMMA: {checkShift(ASCII.CHAR_SIGN_COMMA, ASCII.CHAR_SIGN_LESS);break;}case KeyEvent.KEYCODE_PERIOD: {checkShift(ASCII.CHAR_SIGN_PERIOD, ASCII.CHAR_SIGN_GREATER);break;}case KeyEvent.KEYCODE_SLASH: {checkShift(ASCII.CHAR_SIGN_SLASH, ASCII.CHAR_SIGN_QUESTION);break;}// 其他單字符鍵位case KeyEvent.KEYCODE_SPACE: {stringBuilder.append(ASCII.CHAR_SIGN_SPACE);log.info("Other StringBuilder:" + stringBuilder);break;}default: {return false;}}return true;}return true;}/*** 判斷是否同時按下Shift鍵** @param ascallNoShift* @param ascallOnShift*/private void checkShift(char ascallNoShift, char ascallOnShift) {if (isKeySHIFT) {stringBuilder.append(ascallOnShift);isKeySHIFT = false;} else {stringBuilder.append(ascallNoShift);}}/*** 數字鍵盤區按鍵** @param keyCode*/public void handleNumPadKeys(int keyCode) {if (keyCode <= 153) {stringBuilder.append((char) (keyCode - 96));} else if (keyCode == KeyEvent.KEYCODE_NUMPAD_DIVIDE) {stringBuilder.append(ASCII.CHAR_SIGN_SLASH);} else if (keyCode == KeyEvent.KEYCODE_NUMPAD_MULTIPLY) {stringBuilder.append(ASCII.CHAR_SIGN_STAR);} else if (keyCode == KeyEvent.KEYCODE_NUMPAD_SUBTRACT) {stringBuilder.append(ASCII.CHAR_SIGN_MINUS);} else if (keyCode == KeyEvent.KEYCODE_NUMPAD_ADD) {stringBuilder.append(ASCII.CHAR_SIGN_PLUS);} else if (keyCode == KeyEvent.KEYCODE_NUMPAD_DOT) {stringBuilder.append(ASCII.CHAR_SIGN_PERIOD);}}/*** 鍵盤上方數字鍵** @param keyCode*/private void handleTopNumKeys(int keyCode) {if (keyCode < 7 || keyCode > 16) {return;}switch (keyCode) {case KeyEvent.KEYCODE_0:checkShift(ASCII.CHAR_NUM_0, ASCII.CHAR_SIGN_PAREN_RIGHT);break;case KeyEvent.KEYCODE_1:checkShift(ASCII.CHAR_NUM_1, ASCII.CHAR_SIGN_EXCLAM);break;case KeyEvent.KEYCODE_2:checkShift(ASCII.CHAR_NUM_2, ASCII.CHAR_SIGN_AT);break;case KeyEvent.KEYCODE_3:checkShift(ASCII.CHAR_NUM_3, ASCII.CHAR_SIGN_HASH);break;case KeyEvent.KEYCODE_4:checkShift(ASCII.CHAR_NUM_4, ASCII.CHAR_SIGN_DOLLAR);break;case KeyEvent.KEYCODE_5:checkShift(ASCII.CHAR_NUM_5, ASCII.CHAR_SIGN_PERCENT);break;case KeyEvent.KEYCODE_6:checkShift(ASCII.CHAR_NUM_6, ASCII.CHAR_SIGN_CARET);break;case KeyEvent.KEYCODE_7:checkShift(ASCII.CHAR_NUM_7, ASCII.CHAR_SIGN_AMPERSAND);break;case KeyEvent.KEYCODE_8:checkShift(ASCII.CHAR_NUM_8, ASCII.CHAR_SIGN_STAR);break;case KeyEvent.KEYCODE_9:checkShift(ASCII.CHAR_NUM_9, ASCII.CHAR_SIGN_PAREN_LEFT);break;default:break;}}public interface ScanGunCallBack {public void onScanFinish(String data);} }

3、在Fragment中使用ScanGun類。

ScanGun類定義了一個內部類接口,data就是掃描完成后的內容:

public interface ScanGunCallBack {public void onScanFinish(String data); }

掃碼完成后,調用該接口的onScanFinish方法:

// Enter if (keyCode == KeyEvent.KEYCODE_ENTER) {isKeySHIFT = false;currentTime = 0;if (callBack != null) {log.info("stringBuilder:" + stringBuilder);callBack.onScanFinish(stringBuilder.toString());}return true; }

所以在Fragment獲取掃描結果,需要創建Scan的實例,并且實現這個onScanFinish方法:

/* 初始化掃碼槍 */ private void initScanGun() {// 設置key事件最大間隔,默認20ms,部分低端掃碼槍效率低ScanGun.setMaxKeysInterval(50);scanGun = new ScanGun(new ScanGun.ScanGunCallBack() {@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)@Overridepublic void onScanFinish(String scanResult) {if (payment.getVisibility() != View.GONE) { // 支付頁面沒關閉loadingDailog = createWaitingUI(loadingDailog, LOADING_MSG_Paying);// 判斷優惠券是否可用if (!validateCouponCodeAvailable()) {return;}if (choosePaymentType.getCheckedRadioButtonId() == wechatPay.getId()) {……

總結

以上是生活随笔為你收集整理的安卓开发实现获取扫码枪扫码二维码、条形码后的内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区高清| 久久丫精品国产亚洲av不卡 | 午夜毛片 | 久久美女精品 | 亚洲欧美激情一区二区三区 | 日本黄视频在线观看 | 亚洲精品国产一区 | 激情视频免费观看 | 中文字幕观看视频 | 黄色网战入口 | 欧美三级 欧美一级 | h片在线看 | 一区二区三区视频在线播放 | 国产69精品久久久 | 91美女精品 | 91av在线免费视频 | 福利综合网 | av影视在线 | 免费91看片| 国内三级在线 | 婷婷久久伊人 | www婷婷av久久久影片 | 久久嫩草视频 | 欧美性猛交xxxx乱大交hd | 国产片久久 | 高清久久久久久 | 国产精品一二 | 激情综合图区 | 精人妻无码一区二区三区 | 人妻久久一区二区 | 女儿的朋友在线播放 | 国产男女视频 | 四虎网站在线 | 国产女人叫床高潮大片免费 | 99热3| 丁香婷婷综合激情 | 黄色一级片一级片 | 国产毛片欧美毛片久久久 | jizz18欧美18| 18岁免费观看电视连续剧 | 国产精品一区二区无码免费看片 | 午夜久久久久久久久久久 | 亚洲少妇毛片 | 天堂在线中文 | 亚洲熟妇无码另类久久久 | 93久久精品日日躁夜夜躁欧美 | 天天草av| 日韩欧美黄色片 | 国产日韩中文字幕 | 一级特黄肉体裸片 | 琪琪色网 | 日韩精品h| 久久韩日| 日韩一级网站 | 免费成人在线电影 | 在线视频日韩 | 亚洲狼人综合 | 国产一区二区视频免费在线观看 | 成人亚洲欧美 | 手机av电影在线 | 深夜福利1000| 国产精品久久久久久网站 | 国产v片在线观看 | 尤果网福利视频在线观看 | 色爽爽一区二区三区 | 欧美视频久久 | 亚洲麻豆视频 | www射| 99欧美精品 | 16—17女人毛片 | 日韩一级在线视频 | 蜜臀av无码精品人妻色欲 | 亚洲第七页 | 伊人啪啪| 美日韩一区 | 久久加勒比 | 麻豆午夜 | 香蕉久久国产av一区二区 | 日韩操比 | 好吊操av| 国产精品国产馆在线真实露脸 | 国产精品网址 | 操操操影院 | 成人试看120秒体验区 | 国产手机av在线 | 黑人与日本少妇高潮 | 欧美精品免费一区二区 | 99国产视频在线 | 久久伊人中文字幕 | 高清一区二区三区四区 | 亚洲色图在线观看视频 | www.黄色网 | 国产精品探花在线观看 | 国产男女裸体做爰爽爽 | 久久久久极品 | 在线青草 | 久久久久人妻一区精品 | 美女屁股眼视频免费 | www视频在线免费观看 |