網(wǎng)站首頁 編程語言 正文
Android 的APP 需要集成一個(gè)藍(lán)牙掃碼器, 特別的是,需要掃碼的地方是沒有輸入框的(EditText),不能通過直覺上理解的通過對EditText輸入事件進(jìn)行監(jiān)聽處理,取得掃碼結(jié)果。并且設(shè)備也沒有提供SDK。
細(xì)想了一下, 藍(lán)牙掃碼器本質(zhì)應(yīng)該是個(gè)HID設(shè)備,相當(dāng)于藍(lán)牙鍵盤。而后豁然開朗。
每一次掃碼應(yīng)該會觸發(fā)按鍵事件,通過監(jiān)聽當(dāng)前Activity的按鍵事件,應(yīng)該可以實(shí)現(xiàn),無輸入框的情況下取得掃碼結(jié)果。
重載Activity中的dispatchKeyEvent實(shí)現(xiàn)按鍵監(jiān)聽。
@Override public boolean dispatchKeyEvent(KeyEvent event) { InputDevice inputDevice = event.getDevice(); if (inputDevice != null) { int keyboardType = event.getDevice().getKeyboardType(); String deviceName = event.getDevice().getName(); boolean isVirtual = event.getDevice().isVirtual(); //可以根據(jù)輸入設(shè)備信息判斷是否為特定掃碼器輸入 if (!isVirtual) { scannerHelper.onScanerInput(event); } } }
通常掃碼器在掃碼結(jié)果后會追加一個(gè)結(jié)束字符,我的這個(gè)設(shè)備默認(rèn)為回車。 所以接收到回車可以認(rèn)為一個(gè)掃碼結(jié)果“輸入”完成。
public class ScannerHelper { private String buffer =""; private MainOneActivity mainOneActivity; public ScannerHelper(MainOneActivity mainOneActivity){ this.mainOneActivity = mainOneActivity; } public void onScanerInput(KeyEvent event){ if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){ mainOneActivity.onScannerResult(buffer);//回調(diào)掃碼結(jié)果 buffer=""; }else{ if (event.getAction() == KeyEvent.ACTION_UP && event.isPrintingKey()){ buffer += (char)event.getUnicodeChar(); } } } }
測試OK。
原文鏈接:https://www.cnblogs.com/uncleguo/archive/2022/02/25/15934821.html
相關(guān)推薦
- 2022-06-21 C語言全面講解順序表使用操作_C 語言
- 2024-03-09 【Redis】Redis 實(shí)現(xiàn)分布式Session
- 2022-06-13 Python標(biāo)準(zhǔn)庫之time庫的使用教程詳解_python
- 2022-06-23 nginx日志格式分析以及修改詳解_nginx
- 2023-04-27 antd?upload上傳如何獲取文件寬高_(dá)React
- 2022-11-29 redis配置文件詳解
- 2022-07-30 Linux計(jì)劃任務(wù)介紹
- 2022-12-10 Python直接賦值與淺拷貝和深拷貝實(shí)例講解使用_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支