Android實(shí)現(xiàn)USB掃碼槍獲取掃描內(nèi)容
最近做了關(guān)于在Android設(shè)備上外接掃碼的項(xiàng)目,在此記錄一下關(guān)于Android USB掃碼槍獲取內(nèi)容的問題
首先我這邊使用是USB HID的掃碼槍,即插即用,只需要在界面上有一個(gè)帶有焦點(diǎn)的EditText ,就可以獲取掃碼槍掃描的內(nèi)容。
是不是感覺很簡(jiǎn)單,但是今天我這里是講的是在沒有EditText 的情況下獲取掃碼槍掃描的內(nèi)容。
USB HID掃碼槍會(huì)將掃描出來的內(nèi)容轉(zhuǎn)化為鍵盤事件,對(duì)應(yīng)的就是Android中的KeyEvent事件,所以我們只需要在我們的activity中
重寫onKeyDown方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
checkLetterStatus(event);
keyCodeToNum(keyCode);
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
Log.e("鍵盤事件", buffer.toString());
buffer.delete(0, buffer.length());
return true;
}
return false;
}
上面我們說了掃碼槍是響應(yīng)我們的鍵盤事件,所以當(dāng)掃碼槍每掃描到一個(gè)字符的時(shí)候,就相當(dāng)于按下了我們鍵盤上的對(duì)應(yīng)按鍵,也就是keyCode,因此我們只需要處理這個(gè)keyCode就行了。
下面我把checkLetterStatus()檢查是否大小寫的方法跟keyCodeToNum()根據(jù)對(duì)應(yīng)的keycode轉(zhuǎn)換對(duì)應(yīng)的數(shù)字跟字母
//檢查shift鍵
private void checkLetterStatus(KeyEvent event) {
int keyCode = event.getKeyCode();
if (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT || keyCode == KeyEvent.KEYCODE_SHIFT_LEFT) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
//按著shift鍵,表示大寫
mCaps = true;
} else {
//松開shift鍵,表示小寫
mCaps = false;
}
}
}
//根據(jù)keycode得到對(duì)應(yīng)的字母和數(shù)字
private void keyCodeToNum(int keycode) {
if (keycode >= KeyEvent.KEYCODE_A && keycode <= KeyEvent.KEYCODE_Z) {
if (mCaps) {
buffer.append(map.get(keycode).toUpperCase());
} else {
buffer.append(map.get(keycode));
}
} else if ((keycode >= KeyEvent.KEYCODE_0 && keycode <= KeyEvent.KEYCODE_9)) {
buffer.append(keycode - KeyEvent.KEYCODE_0);
} else {
//暫不處理特殊符號(hào)
}
}
上面的方法里面有個(gè)map,是用來存儲(chǔ)字母的
Map<Integer, String> map = new HashMap<>();
map.put(29, "a");
map.put(30, "b");
map.put(31, "c");
map.put(32, "d");
map.put(33, "e");
map.put(34, "f");
map.put(35, "g");
map.put(36, "h");
map.put(37, "i");
map.put(38, "g");
map.put(39, "k");
map.put(40, "l");
map.put(41, "m");
map.put(42, "n");
map.put(43, "0");
map.put(44, "p");
map.put(45, "q");
map.put(46, "r");
map.put(47, "s");
map.put(48, "t");
map.put(49, "u");
map.put(50, "v");
map.put(51, "w");
map.put(52, "x");
map.put(53, "y");
map.put(54, "z");
最后用一個(gè)StringBuffer 來接收處理過的數(shù)據(jù)。大概就這樣吧!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android App中ListView仿QQ實(shí)現(xiàn)滑動(dòng)刪除效果的要點(diǎn)解析
這篇文章主要介紹了Android App中ListView仿QQ實(shí)現(xiàn)滑動(dòng)刪除效果的要點(diǎn)解析,重點(diǎn)是要判斷手勢(shì)按下的位置坐標(biāo),需要的朋友可以參考下2016-04-04
Android利用SoundPool實(shí)現(xiàn)音樂池
這篇文章主要為大家詳細(xì)介紹了Android利用SoundPool實(shí)現(xiàn)音樂池,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Android如何判斷當(dāng)前點(diǎn)擊位置是否在圓的內(nèi)部
這篇文章主要為大家詳細(xì)介紹了Android如何判斷當(dāng)前點(diǎn)擊位置是否在圓的內(nèi)部,解析拖動(dòng)圓形控件之內(nèi)響應(yīng)觸摸事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android開發(fā)實(shí)現(xiàn)長(zhǎng)按返回鍵彈出關(guān)機(jī)框功能
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)長(zhǎng)按返回鍵彈出關(guān)機(jī)框功能,涉及Android針對(duì)長(zhǎng)按事件的響應(yīng)與處理相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
Android音樂播放器簡(jiǎn)單實(shí)現(xiàn)案例
我們平時(shí)長(zhǎng)時(shí)間打代碼的時(shí)候肯定會(huì)感到疲憊和乏味,這個(gè)時(shí)候一邊播放自己喜歡的音樂,一邊繼續(xù)打代碼,心情自然也愉快很多。音樂帶給人的聽覺享受是無可比擬的,動(dòng)聽的音樂可以愉悅?cè)说纳硇?,讓人更加積極地去熱愛生活,這篇文章主要介紹了Android音樂播放器簡(jiǎn)單實(shí)現(xiàn)案例2022-12-12
logcat命令使用方法和查看android系統(tǒng)日志緩沖區(qū)內(nèi)容的方法
這篇文章主要介紹了logcat命令使用方法和查看android系統(tǒng)日志緩沖區(qū)內(nèi)容的方法,需要的朋友可以參考下2014-02-02
Android編程實(shí)現(xiàn)獲取所有傳感器數(shù)據(jù)的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)獲取所有傳感器數(shù)據(jù)的方法,涉及Android針對(duì)傳感器Sensor相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Android聊天工具基于socket實(shí)現(xiàn)
這篇文章主要介紹了基于socket實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的Android聊天工具,實(shí)現(xiàn)方法簡(jiǎn)單,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2016-02-02
Android組件banner實(shí)現(xiàn)左右滑屏效果
這篇文章主要為大家詳細(xì)介紹了Android組件banner實(shí)現(xiàn)左右滑屏效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10

