第一步,开启连接
首先要开启蓝牙并且找到蓝牙扫描枪连接,在自己的应用中添加权限

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

第二部,建立蓝牙扫描枪帮助类

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.os.Handler;
import android.view.InputDevice;
import android.view.KeyEvent;import java.util.Iterator;
import java.util.Set;/*** 扫码枪事件解析类 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();mStringBufferResult = new StringBuffer();mHandler = new Handler();mScanningFishedRunnable = new Runnable() {@Overridepublic 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<BluetoothDevice> blueDevices = mBluetoothAdapter.getBondedDevices();if (blueDevices == null || blueDevices.size() <= 0) {return false;}for (Iterator<BluetoothDevice> 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*/@Deprecatedpublic boolean isScanGunEvent(KeyEvent event) {return event.getDevice().getName().equals(mDeviceName);}
}

第三部,举例:在MainActivity中调用

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity implements ScanGunKeyEventHelper.OnScanSuccessListener{private TextView textView;private ScanGunKeyEventHelper mScanGunKeyEventHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {this.requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);//初始化控件initView();Log.e("boolean", mScanGunKeyEventHelper.hasScanGun() + "");}private void initView(){textView=(TextView)findViewById(R.id.text);mScanGunKeyEventHelper=new ScanGunKeyEventHelper(this);}@Overrideprotected void onResume() {super.onResume();if (!mScanGunKeyEventHelper.hasScanGun()) {Toast.makeText(MainActivity.this, "未检测到扫码枪设备", Toast.LENGTH_SHORT).show();}}/*** 截获按键事件.发给ScanGunKeyEventHelper* @param event* @return*/@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {if (mScanGunKeyEventHelper.isScanGunEvent(event)) {mScanGunKeyEventHelper.analysisKeyEvent(event);return true;}return super.dispatchKeyEvent(event);}@Overridepublic void onScanSuccess(String barcode) {*//这里就是获取的扫描内容*Log.e("onScanSuccess+++++",barcode);}@Overrideprotected void onDestroy() {super.onDestroy();mScanGunKeyEventHelper.onDestroy();}
}

android设备连接蓝牙扫描枪获取数据相关推荐

  1. Android 蓝牙扫描枪连接状态变化(连接、断开)界面实屏幕会实时刷新重构一次

    场景:Android设备连接蓝牙扫描枪,扫描条形码,获取扫描内容,进行支付,支付成功后到达成功界面,在onCreate()方法中初始化打印小票. 问题:停留在支付成功界面,蓝牙状态发生变化(断开--连 ...

  2. Android设备标准HID协议(外接输入设备)接入蓝牙扫描枪的各种坑与解决办法

    因工作需要最近在做一款蓝牙条码.二维码扫描器枪支持Android设备(执行标准HID协议)的外接输入设备,在开发过程中遇到一些问题,在此记录下来,以便供大家借鉴学习,希望有类似需求的同行少走些弯路.好 ...

  3. Android 设备蓝牙连接扫描枪获取扫描内容

    Android 设备蓝牙连接扫描枪获取扫描内容 标签(空格分隔): 未分类 条形扫描枪主要可以扫描条形码和二维码等,扫描速度比手机扫描设备快得多,本文简单介绍android 通过蓝牙监听蓝牙连接,当扫 ...

  4. Android连接、断开蓝牙扫描枪时屏幕刷新

    场景:使用蓝牙扫描枪连接安卓设备,用于扫描条码. 问题:连接和断开扫描枪时,屏幕都会刷新,造成临时加载的数据丢失. 原因: 扫描枪连接时是将其作为物理输入设备,即物理键盘,而安卓在改变屏幕方向.弹出隐 ...

  5. WP8.1系统不支持蓝牙扫描枪?

    折腾好久发现WP8.1系统是不支持蓝牙扫描枪的,除非OEM商确认启用它,否则Windows Phone 8.1手机将不支持HID协议. 早前一些流出的SDK发现Windows Phone (code- ...

  6. 蓝牙扫描枪直连蓝牙打印机

    蓝牙扫描枪直连蓝牙打印机,全新的仓库.物流管理新方案,简单高效,无需电脑,即可扫码打印标签,条码可以根据自己需要重新生成,标签内容可以自定义排版. 蓝牙连接扫描枪打印演示视频地址:https://v. ...

  7. iOS 蓝牙扫描枪扫描内容不正确

    背景 在移动设备上,使用蓝牙扫描枪,相当于接入了一下外接键盘.我们的客户使用我们的App,并连接蓝牙扫码枪,将扫描的内容传输到我们的App中,App再做出对应的响应,举个例子,较为常见的应用场景就是, ...

  8. 蓝牙扫描枪v-model双向数据绑定缓慢,改为原生input输入的方式——基础积累

    蓝牙扫描枪v-model双向数据绑定缓慢,改为原生input输入的方式 最近在做apicloud的app,设备是一个华为平板,需要外接一个蓝牙扫描枪,通过扫描二维码获取二维码的内容,展示在输入框中. ...

  9. android手机icoude邮件,如何在Android设备上访问Apple应用和数据?教程来了!

    原标题:如何在Android设备上访问Apple应用和数据?教程来了! 对于一些出于工作原因,拥有ios和Android不同系统手机的人来说,有时候会觉得在共享资料或数据上会比较麻烦.但是,其实并非如 ...

最新文章

  1. Ether-channel 以太网通道
  2. 区块链软件公司:创新的区块链技术如何改变法律行业的面貌
  3. linux5.4iso,Redhat Linux5.4/5.5/5.8/6.0/6.3 ISO镜像文件下载
  4. 【译文】东京的外国工程师
  5. Lombok 天天用,却不知道它的原理是什么?
  6. Hi3516A开发--常用指令和根文件目录详解
  7. C语言中的二级指针和二维数组问题
  8. axios请求拦截器、响应拦截器、vue-router路由导航守卫的使用(案例)
  9. C++ 头文件使用规范建议
  10. redis技术分享ppt_一线互联网架构师技术分享:基于redis的分布式锁实现
  11. 原子结构示意图全部_原子结构示意图知识点总结
  12. 【开源】百度中文依存句法分析工具DDParser重磅开源,快来体验一下吧
  13. 配置Jinjia2模板引擎
  14. Python turtle画图之心形图案
  15. 从Bugreport 解读 Android电量统计原理
  16. 以红酒数据集分类为例做决策树的可视化
  17. 详细的买卖天猫店铺网店转让步骤
  18. VSCode配置C/C++(单文件+项目)自救指南
  19. day 1 学习MySQL数据库作业 - 创建员工表思考与表之间的关系
  20. element ui实现自定义上传文件-以及解决已上传文件列表消失问题

热门文章

  1. hdu(5501)——The Highest Mark
  2. 开集(Open Set)、闭集(Closed Set)和紧集(Compact Set)
  3. 年底了,接个大活儿,做一个回顾公司五年发展的总结ppt,要求做成H5网页
  4. 超级仓库管理系统---(1)概述
  5. 一文搞懂人脸识别技术的三种应用模式
  6. 【开发工具】 Adobe 2022 最详细的安装方法 就是这么简单 绿色 安全方便
  7. 旅行-出门必备用品清单
  8. 银联商务PHP和JAVA实现3DES加密
  9. Android点击按键改变按键背景图片-选择器
  10. Kill Safengine Shadow Dll(附源码)