我们使用符号ls4278蓝牙扫描仪集成在Android应用程序中。它作为键盘连接并在任何编辑文本字段中键入扫描条形码... 调用扫描程序OnKeyUp事件后。
public override bool OnKeyUp(Keycode keyCode, KeyEvent e)
{
..
}
我正在搜索文档和android sdk,但我找不到这样的。但对于LI4278,他们在这里有android sdk:https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/li4278.html 这里也是sdk的文档,但LS4278不在支持的设备列表中。
有没有人在Android设备中实现LS4278扫描仪?
答案 0 :(得分:1)
如果它作为蓝牙键盘使用,则无需支持。只需捕获关键事件,并在按下enter时对数据做出反应。它只是一个平庸的体验,可以搞乱屏幕键盘,并阻止他们使用实际的蓝牙键盘。如果扫描仪支持SPP,你可以通过蓝牙串口解析扫描数据(我大概在2周前做过)。
答案 1 :(得分:1)
LS4278产品页面位于https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ls4278.html,仅列出对“Windows扫描仪SDK”的支持。 LS4278于2012年9月24日停产,所以我并不感到惊讶它没有Android支持。如你所说,它的继任者,LI4278确实有Android支持。正如另一个答案所述,如果您想要更好地控制接收数据的方式,那么我建议在扫描仪支持时尝试SPP。
答案 2 :(得分:1)
BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
if(bta != null) {
Set<BluetoothDevice> devices = bta.getBondedDevices();
for (final BluetoothDevice device : devices) {
BluetoothClass btClass = device.getBluetoothClass();
if (btClass.getMajorDeviceClass() == 0x1f00) {
//Only look at devices which are considered uncategorized, so we don't screw up any bt headset, leyboard, mouse, etc
new DeviceThread(device).start();
}
}
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_NONE);
if (state == BluetoothDevice.BOND_BONDED) {
new DeviceThread(device).start();
} else if (state == BluetoothDevice.BOND_NONE) {
DeviceThread thread = threadMap.get(device.getAddress());
if (thread != null) {
thread.interrupt();
}
}
}
}, filter);
}
private class DeviceThread extends Thread {
private BluetoothDevice device;
public DeviceThread(BluetoothDevice device) {
this.device = device;
threadMap.put(device.getAddress(), this);
}
@Override
public void run() {
try {
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
socket.connect();
InputStream inputStream = socket.getInputStream();
while (!Thread.interrupted() && socket.isConnected()) {
inputStream.skip(5);
String data = "";
do {
int code = inputStream.read();
char character = (char) code;
data = data + character;
} while (inputStream.available() > 0);
data = data.substring(0, data.length() - 2);
if (scannerEventListener != null) {
scannerEventListener.onScan(data);
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
Log.d("GABE", "Exiting thread");
}
}
此代码将注册要配对的蓝牙设备,然后检查并查看它们是否为未知设备类型(扫描仪没有设备类)。如果是这样,它将启动一个线程来监听该设备。当它未绑定时,它将中断该线程。在线程上,它打开与设备的SPP连接并等待输入。当它获得它时,它解析输入并将结果发送给监听器。
为此,扫描仪需要处于SPP模式。有些扫描仪支持它,有些则不支持,以及如何将其设置为该模式各不相同(我桌面上的扫描仪有一个我需要扫描以设置模式的控制条形码)。通常我会编写它来接受任何类型的输入硬件键盘模式或SPP。