Android设备蓝牙连接扫描枪怎么获取扫描内容
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下Android设备蓝牙连接扫描枪怎么获取扫描内容,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.蓝牙配
千家信息网最后更新 2026年11月03日Android设备蓝牙连接扫描枪怎么获取扫描内容
小编给大家分享一下Android设备蓝牙连接扫描枪怎么获取扫描内容,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
1.蓝牙配对
打开系统设置,蓝牙配对扫描枪, 一般扫描枪说明书都有写,配对完成后,显示已连接
2.AndroidManifest中配置权限
在中配置蓝牙连接所需要的权限
3.获取设备信息,判断是否连接
这里蓝牙设备返回的设备类型是BluetoothClass.Device.Major.PERIPHERAL
/** * 扫描枪是否连接 * @return */ public boolean hasScanGun() { if (mBluetoothAdapter == null) { return false; } Set blueDevices = mBluetoothAdapter.getBondedDevices(); if (blueDevices == null || blueDevices.size() <= 0) { return false; } for (Iterator iterator = blueDevices.iterator(); iterator.hasNext(); ) { BluetoothDevice bluetoothDevice = iterator.next(); if (bluetoothDevice.getBluetoothClass().getMajorDeviceClass() == BluetoothClass.Device.Major.PERIPHERAL) { mDeviceName = bluetoothDevice.getName(); return isInputDeviceExist(mDeviceName); } } return false; } /** * 输入设备是否存在 * @param deviceName * @return */ private boolean isInputDeviceExist(String deviceName) { int[] deviceIds = InputDevice.getDeviceIds(); for (int id : deviceIds) { if (InputDevice.getDevice(id).getName().equals(deviceName)) { return true; } } return false;} 4.构建扫描枪解析类ScanGunKeyEventHelper
使用扫描枪解析类需要在相关类中调用 analysisKeyEvent(KeyEvent event) ,传入监听事件,当解析相对应事件获得输入内容,通过OnScanSuccessListener 接口回调返回
/** * 扫码枪事件解析类 by chen */public class ScanGunKeyEventHelper { private final static long MESSAGE_DELAY = 500;//延迟500ms,判断扫码是否完成。 private StringBuffer mStringBufferResult;//扫码内容 private boolean mCaps;//大小写区分 private final Handler mHandler; private final BluetoothAdapter mBluetoothAdapter; private final Runnable mScanningFishedRunnable; private OnScanSuccessListener mOnScanSuccessListener; private String mDeviceName; public ScanGunKeyEventHelper(OnScanSuccessListener onScanSuccessListener) { mOnScanSuccessListener = onScanSuccessListener ; //获取系统蓝牙适配器管理类 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();// BluetoothDevice printerdevice = mBluetoothAdapter.getRemoteDevice("ssss");// BluetoothSocket btSocket = printerdevice.createRfcommSocketToServiceRecord("ssss"); mStringBufferResult = new StringBuffer(); mHandler = new Handler(); mScanningFishedRunnable = new Runnable() { @Override public void run() { performScanSuccess(); } }; } /** * 返回扫码成功后的结果 */ private void performScanSuccess() { String barcode = mStringBufferResult.toString(); if (mOnScanSuccessListener != null) mOnScanSuccessListener.onScanSuccess(barcode); mStringBufferResult.setLength(0); } /** * 扫码枪事件解析 * @param event */ public void analysisKeyEvent(KeyEvent event) { int keyCode = event.getKeyCode(); //字母大小写判断 checkLetterStatus(event); if (event.getAction() == KeyEvent.ACTION_DOWN) { char aChar = getInputCode(event);; if (aChar != 0) { mStringBufferResult.append(aChar); } if (keyCode == KeyEvent.KEYCODE_ENTER) { //若为回车键,直接返回 mHandler.removeCallbacks(mScanningFishedRunnable); mHandler.post(mScanningFishedRunnable); } else { //延迟post,若500ms内,有其他事件 mHandler.removeCallbacks(mScanningFishedRunnable); mHandler.postDelayed(mScanningFishedRunnable, MESSAGE_DELAY); } } } //检查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; } } } //获取扫描内容 private char getInputCode(KeyEvent event) { int keyCode = event.getKeyCode(); char aChar; if (keyCode >= KeyEvent.KEYCODE_A && keyCode <= KeyEvent.KEYCODE_Z) { //字母 aChar = (char) ((mCaps ? 'A' : 'a') + keyCode - KeyEvent.KEYCODE_A); } else if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) { //数字 aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_0); } else { //其他符号 switch (keyCode) { case KeyEvent.KEYCODE_PERIOD: aChar = '.'; break; case KeyEvent.KEYCODE_MINUS: aChar = mCaps ? '_' : '-'; break; case KeyEvent.KEYCODE_SLASH: aChar = '/'; break; case KeyEvent.KEYCODE_BACKSLASH: aChar = mCaps ? '|' : '\\'; break; default: aChar = 0; break; } } return aChar; } public interface OnScanSuccessListener { void onScanSuccess(String barcode); } public void onDestroy() { mHandler.removeCallbacks(mScanningFishedRunnable); mOnScanSuccessListener = null; } //部分手机如三星,无法使用该方法// private void hasScanGun() {// Configuration cfg = getResources().getConfiguration();// return cfg.keyboard != Configuration.KEYBOARD_NOKEYS;// } /** * 扫描枪是否连接 * @return */ public boolean hasScanGun() { if (mBluetoothAdapter == null) { return false; } Set blueDevices = mBluetoothAdapter.getBondedDevices(); if (blueDevices == null || blueDevices.size() <= 0) { return false; } for (Iterator iterator = blueDevices.iterator(); iterator.hasNext(); ) { BluetoothDevice bluetoothDevice = iterator.next(); if (bluetoothDevice.getBluetoothClass().getMajorDeviceClass() == BluetoothClass.Device.Major.PERIPHERAL) { mDeviceName = bluetoothDevice.getName(); return isInputDeviceExist(mDeviceName); } } return false; } /** * 输入设备是否存在 * @param deviceName * @return */ private boolean isInputDeviceExist(String deviceName) { int[] deviceIds = InputDevice.getDeviceIds(); for (int id : deviceIds) { if (InputDevice.getDevice(id).getName().equals(deviceName)) { return true; } } return false; } /** * 是否为扫码枪事件(部分机型KeyEvent获取的名字错误) * @param event * @return */ @Deprecated public boolean isScanGunEvent(KeyEvent event) { return event.getDevice().getName().equals(mDeviceName);} /** * 检测蓝牙是否开启 */ public int checkBluetoothValid() { if(mBluetoothAdapter == null) {//你的设备不具备蓝牙功能! return 1; } if(!mBluetoothAdapter.isEnabled()) {//蓝牙设备未打开,请开启此功能后重试! return 2; } return 3;//蓝牙正常工作 }} 5.在Activity中使用解析类ScanGunKeyEventHelper
Activity中重写dispatchKeyEvent方法,截取Key事件。
/** * 截获按键事件.发给ScanGunKeyEventHelper * * @param event * @return */ @Override public boolean dispatchKeyEvent(KeyEvent event) { if (mScanGunKeyEventHelper.isScanGunEvent(event)) { mScanGunKeyEventHelper.analysisKeyEvent(event); return true; } return super.dispatchKeyEvent(event); }获取扫描结果回调,详细代码请查看TestScanner
/** * @author Wu JianCheng * @date on 2018/12/18 14:44 * 测试蓝牙连接扫描枪功能 */public class BleAct extends Activity implements ScanGunKeyEventHelper.OnScanSuccessListener { ... /** * 扫描结果回调 * @param barcode */ @Override public void onScanSuccess(String barcode) { showToast(barcode); } ...}以上是"Android设备蓝牙连接扫描枪怎么获取扫描内容"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
蓝牙
设备
扫描枪
事件
内容
功能
篇文章
结果
输入
大小
方法
权限
系统
部分
延迟
配置
成功
不怎么
代码
名字
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海喔噻互联网科技有限公司
蓝思科技飞鸽互联网
科技互联网企业
云信互联网科技有限公司
科技互联网公司装修
互联网下的科技发展
互联网金融 金融科技
高科技与互联网
易通互联网络科技有限公司
齐家互联网科技有限公司
互联网金融和金融科技
无锡溥仪互联网科技有限公司
汉立互联网科技有限公司联系电话
互联网和高科技公司
互联网时代科技改变生活
科技类公司包括互联网吗
晋城互联网科技
云南省自由互联网科技有限公司
抖集互联网科技技术咨询
云鲸互联网络科技有限公司
互联网科技排名
融势互联网科技
深圳艾佳互联网科技
互联网科技中介
哈尔滨屹滨互联网科技有限公司
链环科技传统企业怎么转型互联网
科技赋能视角下互联网保险发展
张召忠谈中国互联网科技
珠海东科互联网科技有限公司
广西科技产业互联网是什么