【发布时间】:2012-05-30 21:48:50
【问题描述】:
在我的项目中,我必须使用条形码扫描仪 Symbol CS3070 通过蓝牙读取条形码。 IE;我必须通过蓝牙在 android 设备和条形码扫描仪之间建立连接。谁能告诉我如何从条形码阅读器读取值以及如何设置通信?我已经阅读了Bluetooth Developer Guide,并且我不想在蓝牙键盘仿真 (HID) 模式下使用条形码阅读器(我有一些可以使用软键盘和条形码阅读器填充的文本视图,但我无法控制重点)
我会使用这样的线程与读者交流
private class BarcodeReaderThread extends Thread {
private final BluetoothServerSocket mmServerSocket;
public BarcodeReaderThread(UUID UUID_BLUETOOTH) {
// Use a temporary object that is later assigned to mmServerSocket,
// because mmServerSocket is final
BluetoothServerSocket tmp = null;
try {
// MY_UUID is the app's UUID string, also used by the client code
tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("BarcodeScannerForSGST", UUID_BLUETOOTH);
/*
* The UUID is also included in the SDP entry and will be the basis for the connection
* agreement with the client device. That is, when the client attempts to connect with this device,
* it will carry a UUID that uniquely identifies the service with which it wants to connect.
* These UUIDs must match in order for the connection to be accepted (in the next step)
*/
} catch (IOException e) { }
mmServerSocket = tmp;
}
public void run() {
BluetoothSocket socket = null;
// Keep listening until exception occurs or a socket is returned
while (true) {
try {
socket = mmServerSocket.accept();
try {
// If a connection was accepted
if (socket != null) {
// Do work to manage the connection (in a separate thread)
InputStream mmInStream = null;
// Get the input and output streams, using temp objects because
// member streams are final
mmInStream = socket.getInputStream();
byte[] buffer = new byte[1024]; // buffer store for the stream
int bytes; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
// Read from the InputStream
bytes = mmInStream.read(buffer);
if (bytes > 0) {
// Send the obtained bytes to the UI activity
String readMessage = new String(buffer, 0, bytes);
//doMainUIOp(BARCODE_READ, readMessage);
if (readMessage.length() > 0 && !etMlfb.isEnabled()) //Se sono nella parte di picking
new ServerWorker().execute(new Object[] {LEGGI_SPED, readMessage});
}
socket.close();
}
}
catch (Exception ex) { }
} catch (IOException e) {
break;
}
}
}
/**
* Will cancel the listening socket, and cause the thread to finish
*/
public void cancel() {
try {
mmServerSocket.close();
} catch (IOException e) { }
}
}
谢谢
【问题讨论】:
-
我的应用程序需要相同的功能,如果您发现任何与此任务相关的有用信息,请告诉我。
-
我也在尝试实现这一点,如果您找到解决方案,请告诉我。谢谢。
-
您好!我想知道您是否需要读取蓝牙设备!我遇到了你提到的同样的问题! @Android84
-
您好@sioesi,是的,下面的解决方案解决了问题,但最好在蓝牙键盘仿真模式下使用条形码扫描仪
-
@Android84 也是?你觉得我们可以联系吗?