最近做了一个Android外接USB读卡器刷手环读取数据,模拟键盘输入事件的项目;
连接电子牌板子调试,可以将板子上OTG跳帽取下,然后用一根双USB口的线连接电脑就可以调试了(ps:板子上一般连接靠近网线的USB口)
因为之前公司的Android系统的电子牌的读卡器是通过串口开发的,最近由于换了电子牌的厂商,手环读取方式也更改了,无奈研究了一番,从网上找了相关文章,但是没有找到具体的,其中根据某个大神的外接扫码器的项目,结合实际终于实现了;
不管外接扫码枪还是外接读卡器,其实原理就我了解的原理是一样的,都是会将扫描到或者刷卡读取到的数据模拟成键盘输入的事件,你会发现,当Android界面有一个焦点输入框时候,扫码或者刷卡,数据都会自动填充输入框, 那问题也随之而来,我们需要做的其实就是监听按键输入事件,然后获取扫到或者读取到的数据,之后进行一些其他方面的操作.
回归正文:
后台无障碍服务AccessibilityService配置
import android.accessibilityservice.AccessibilityService;
import android.util.Log;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityEvent;
/**
* Created by Administrator on 2019/4/22.
*/
public class ReadCardService extends AccessibilityService {
private static final String TAG = ReadCardService.class.getSimpleName();
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.e(TAG, "onAccessibilityEvent --> " + event);
}
@Override
public void onInterrupt() {
Log.e(TAG, "onInterrupt");
}
/**
* 复写这个方法可以捕获按键事件
*
* @param event
* @return
*/
@Override
protected boolean onKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
Log.e(TAG, "keyEvent:" + event + "keyCode: " + keyCode + "char: " + KeyEvent.keyCodeToString(keyCode));
return super.onKeyEvent(event);
}
}
在AndroidManifest.xml文件中记得配置
<service
android:name=".readService.ReadCardService"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.Acces