zebra扫描程序集成在android

时间:2017-08-16 14:08:09

标签: android xamarin.android android-bluetooth zebra

我们使用符号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扫描仪?

3 个答案:

答案 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。