Android设备获取USB扫码枪扫描的内容与可能遇到的问题解决

您所在的位置:网站首页 扫描二维码的扫描枪 Android设备获取USB扫码枪扫描的内容与可能遇到的问题解决

Android设备获取USB扫码枪扫描的内容与可能遇到的问题解决

2024-07-11 04:37| 来源: 网络整理| 查看: 265

这篇文章主要给大家介绍了关于Android设备获取扫码枪扫描内容的方法,以及在开发中可能会遇到的问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。

前言

大家应该都有所体会,在生活中条形码扫码枪可是随处可见,可以很迅速地扫描出条形码内容,比什么手机相机扫码快了不是一点两点。

为了节约成本,扫码枪可以直接通过蓝牙连接android或其他设备。

那么android设备如何通过蓝牙获取扫描内容的呢? 1. 蓝牙配对,连接设备

打开系统设置,找到蓝牙,打开扫码枪,配对扫码枪设备。输入一个固定的配对码,一般扫码枪说明书里都有写。配对完成后,显示设备已连接。就ok。

2.AndroidManifest中配置权限

android项目中的AndroidManifest.xml文件添加蓝牙权限。

3.检测扫码枪的连接状态

通常来说,扫码枪设备也相当于普通外接输入设备类型,外接键盘。

我这款扫码枪设备返回的是如下蓝牙类型。

1

BluetoothClass.Device.Major.PERIPHERAL

一般而言,通过如下这种方式就可以获得到我们扫码枪设备的信息。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Set blueDevices = mBluetoothAdapter.getBondedDevices();

if (blueDevices == null || blueDevices.size() 18,即android 4.3版本以上才可用。

后来转头一想,既然扫码枪也是输入设备,我们可以不同蓝牙设备状态检测入手,改为从输入设备检测入手。于是,

1

2

3

4

private void hasScanGun() {

 Configuration cfg = getResources().getConfiguration();

 return cfg.keyboard != Configuration.KEYBOARD_NOKEYS;

}

搞定。

4.获取扫码枪扫描内容

扫描枪,既然是一个外接输入设备,那么很自然的,我们就从KeyEvent入手。

事件解析类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

/**

 * 扫码枪事件解析类

 */

public class ScanGunKeyEventHelper {

 //延迟500ms,判断扫码是否完成。

 private final static long MESSAGE_DELAY = 500;

 //扫码内容

 private StringBuffer mStringBufferResult = new StringBuffer();

 //大小写区分

 private boolean mCaps;

 private OnScanSuccessListener mOnScanSuccessListener;

 private Handler mHandler = new Handler();

 private final Runnable mScanningFishedRunnable = new Runnable() {

 @Override

 public void run() {

  performScanSuccess();

 }

 };

 //返回扫描结果

 private void performScanSuccess() {

 String barcode = mStringBufferResult.toString();

 if (mOnScanSuccessListener != null)

  mOnScanSuccessListener.onScanSuccess(barcode);

 mStringBufferResult.setLength(0);

 }

 //key事件处理

 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_0 && keyCode



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3