gpt4 book ai didi

android - 如何从蓝牙条码扫描器Symbol CS3070读取数据到Android设备

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:03 25 4
gpt4 key购买 nike

在我的项目中,我必须通过蓝牙使用条码扫描器 Symbol CS3070 读取条码。 IE;我必须通过蓝牙在安卓设备和条形码扫描仪之间建立连接。谁能告诉我如何从条形码阅读器读取值以及如何设置通信?我已经阅读了 Bluetooth Developer Guide ,并且我不想在蓝牙键盘仿真 (HID) 模式下使用条码阅读器(我有一些可以使用软键盘和条码阅读器填充的 TextView ,但我无法控制焦点)

我会使用这样的线程与读者交流

    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) { }
}
}

谢谢

最佳答案

我刚收到我的设备,当我配对并连接设备时,它会自动将数据发送到当前聚焦的 EditText。你用的是什么版本的 Android,因为我在 ICS 和 JB 上试过,它是这样工作的。我没有在任何早期版本中测试过它。

编辑:

我将我的手机降级为 Gingerbread,发现它的工作方式不同,但我有一个解决方案:

这很重要! >> 首先,您必须扫描手册中的条形码,上面写着“Serial Port Profile (SPP)”。

btAdapter = BluetoothAdapter.getDefaultAdapter();
if (btAdapter.isEnabled())
{
new BluetoothConnect().execute("");
}

public class BluetoothConnect extends AsyncTask<String, String, Void>
{
public static String MY_UUID = "00001101-0000-1000-8000-00805F9B34FB";

@Override
protected Void doInBackground(String... params)
{
String address = DB.GetOption("bluetoothAddress");
BluetoothDevice device = btAdapter.getRemoteDevice(address);
try
{
socket = device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));
btAdapter.cancelDiscovery();
socket.connect();
InputStream stream = socket.getInputStream();
int read = 0;
byte[] buffer = new byte[128];
do
{
try
{
read = stream.read(buffer);
String data = new String(buffer, 0, read);
publishProgress(data);
}
catch(Exception ex)
{
read = -1;
}
}
while (read > 0);
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}

@Override
protected void onProgressUpdate(String... values)
{
if (values[0].equals("\r"))
{
addToList(input.getText().toString());
pickupInput.setText("");
}
else input.setText(values[0]);
super.onProgressUpdate(values);
}
}

这是我的工作代码的不完整版本,但您应该了解要点。
我希望这个解决方案也适用于您!

关于android - 如何从蓝牙条码扫描器Symbol CS3070读取数据到Android设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10735318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com