2017-08-16 97 views
1

我们正在使用符号ls4278蓝牙扫描仪集成在android应用程序。它作为键盘连接并在任何编辑文本字段中键入扫描的条形码... 扫描仪OnKeyUp事件被调用后。斑马扫描仪集成在android

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扫描仪?

回答

1

LS4278产品页面在这里:https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ls4278.html并仅列出对“Windows Scanner SDK”的支持。 LS4278于2012年9月24日停产,所以我不觉得它没有Android支持。正如你所说,它的后继者,LI4278确实有Android支持。正如其他答案所述,如果您想更多地控制接收数据的方式,那么我建议在扫描器支持的情况下尝试使用SPP。

1

如果它用作蓝牙键盘,则不需要支持。只需捕捉关键事件,并在输入按下时对数据做出反应。它只是一个平庸的经验,可以在屏幕键盘上搞砸,并阻止他们使用实际的蓝牙键盘。如果扫描仪支持SPP,则可以通过蓝牙串行解析扫描数据(我在2周前完成了这项工作)。

+0

用户不想按回车,扫描仪本身不会按任何其他按钮期望条码数字...关于SPP我不知道,这里是没有关于这个文件(或我找不到)因此,我需要以某种方式进行测试 – Nininea

+0

扫描仪本身发送回车键作为条形码的最后一个字符。所以你可以捕捉到。这是onKeyUp实际工作的极少数情况之一。至于SPP-我会为此发布第二个答案,实际上我是在几周前自己做的。 –

0
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。