Android掃碼槍監聽封裝
一、參考
一、簡述
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行不行,隨時隨地可以掃描?
怎麼搞啊!!沒思路,蛋疼!!廣大碼友,有推薦的解決方案可以貼出來。
 ̄へ ̄
相關文章
- html5+的plus 監聽掃描槍廣播 處理掃描結果HTML
- Android BLE 藍芽開發——掃碼槍基於BLESSEDAndroid藍芽
- 手持裝置掃描槍開發
- java實現掃碼槍-微信支付Java
- Android 解除安裝監聽詳解Android
- 用go封裝和實現掃碼登入Go封裝
- 基於 Zxing 封裝的 Hndxing 掃碼庫封裝
- 如何防止網路監聽與埠掃描
- Android截圖監聽Android
- 如何使用js獲取USB掃碼槍資料JS
- C#實現掃碼槍串列埠通訊C#串列埠
- Android 掃碼槍輸入時遮蔽軟鍵盤和頂部狀態列Android
- listener監聽監控指令碼指令碼
- 新增監聽密碼密碼
- vue.js 掃碼槍 input 輸入法問題Vue.js
- Android Home鍵監聽Android
- Android應用如何監聽自己是否被解除安裝Android
- PDA uni-app 監聽掃碼廣播的一個外掛(日記)APP
- 海康ID2013掃碼槍除錯筆記除錯筆記
- home鍵監聽(Android應用切換到後臺監聽)Android
- 監聽設定密碼密碼
- Android Hook 全面入侵監聽器AndroidHook
- Android.GridView事件監聽AndroidView事件
- 為監聽設定密碼防止遠端關閉監聽密碼
- wemall app商城原始碼Android簡訊監聽接收器APP原始碼Android
- Android微信掃碼支付Android
- Android 監聽生命週期工具庫Android
- Android 監聽鍵盤彈出收起Android
- android PopupWindow監聽返回鍵無效Android
- 為監聽設定密碼密碼
- 監聽 watch props物件屬性監聽 或深度監聽物件
- Android Service 服務的應用之電話監聽器以及簡訊監聽器Android
- Android Home鍵、鎖屏鍵監聽Android
- Android的事件處理——監聽介面方式Android事件
- Android 監聽home鍵的動作Android
- android監聽TF卡插拔事件 判斷Android事件
- Android Logcat 封裝類AndroidGC封裝
- 【spring原始碼】十二、監聽器Spring原始碼