gpt4 book ai didi

Android BluetoothSocket 连接返回零

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:11:40 25 4
gpt4 key购买 nike

我们的设备通过蓝牙发送数据,在android应用中我们需要读取这些数据。

我能够建立蓝牙连接,接下来我调用线程以使用 BluetoothDevice 建立 BluetoothSocket 连接。此处读取字节时返回 0(零)此外,while 循环仅运行一次。

此外,我在下面的代码中使用的 UUID 来自一些蓝牙代码 fragment 。我是否需要获取设备的正确 UUID。

有人能帮忙吗?如果你给我有用的答案,我将不胜感激。

   //Calling ConnectThread after Bluetooth is paired
public class ConnectThread extends Thread {
private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;
private final UUID MY_UUID = UUID
.fromString("00001101-0000-1000-8000-00805f9b34fb");

public ConnectThread(BluetoothDevice device) {
BluetoothSocket tmp = null;
mmDevice = device;
try {
String name = device.getName();
Log.e("Device Name ", name);
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
}
mmSocket = tmp;
}

public void run() {
// mAdapter.cancelDiscovery();
try {
mmSocket.connect();

ConnectedThread mConnectedThread = new ConnectedThread(mmSocket);
mConnectedThread.start();
} catch (IOException connectException) {
// try {
// mSocket.close();
// } catch (IOException closeException) { }
return;
}
}

public void cancel() {
try {
mmSocket.close();
} catch (IOException e) {
}
}
}

private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;

public ConnectedThread(BluetoothSocket socket) {
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
}

public void run() {
byte[] buffer = new byte[1024];
int begin = 0;
int bytes = 0;
while (true) {
try {
// bytes += mmInStream.read(buffer, bytes, buffer.length
// - bytes);
if (mmSocket.isConnected()) {
Log.e("Socket is connected", "Socket is connected");
}
int numOfBytes = mmInStream.available();
Log.e("numOfBytes", String.valueOf(+numOfBytes));
bytes = mmInStream.read(buffer);

// mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
// .sendToTarget();



} catch (IOException e) {
break;
}
}
}


i am struck and unable to read the data from the Bluetooth

最佳答案

Do I need to obtain the correct UUID of the device.

是的。您可以使用 BluetoothDevicegetUuids() 返回远程设备支持的功能 (UUID),或者 fetchUuidsWithSdp() 如果是新的 UUID是需要的。

The while loop is running for only once.

这是因为你的代码抛出错误,你正在处理这个错误并退出循环

            while (true) {
try {
// bytes += mmInStream.read(buffer, bytes, buffer.length
// - bytes);
if (mmSocket.isConnected()) {
Log.e("Socket is connected", "Socket is connected");
}
int numOfBytes = mmInStream.available();
Log.e("numOfBytes", String.valueOf(+numOfBytes));
bytes = mmInStream.read(buffer);

// mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
// .sendToTarget();



} catch (IOException e) {
// THIS BREAK INTERRUPT YOUR WHILE-LOOP SENTENCE
break;
}
}

Here when the bytes are read it is returning as 0

因为您创建了一个套接字的 InputStream 它没有连接到任何东西(因为您创建的用于生成套接字的 UUID 在您建立蓝牙连接的设备中不存在)

编辑

获取 uuid 的其他方法是配置广播接收器以取回 uuid:

//Register the BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothDevice.ACTION_UUID);
//Set your other filters
registerReceiver(ActionFoundReceiver, filter); // Don't forget to unregister during onDestroy

并创建您的 BroadcastRecievier 以获取 UUID:

  private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver(){

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();

if(BluetoothDevice.ACTION_UUID.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
for (int i=0; i<uuidExtra.length; i++) {
Log.i("TEST-UUIDS","Device: " + device.getName() + ", " + device + ", Service: " + uuidExtra[i].toString());
}
}
else if(BluetoothDevice.YOUR_OTHER_ACTION_1){
//YOUR CODE FOR ACTION 1

}
else if(BluetoothDevice.YOUR_OTHER_ACTION_2){
//YOUR CODE FOR ACTION 2

}

}
};

注意:并非每个蓝牙设备都显示其服务 uuid

关于Android BluetoothSocket 连接返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36866703/

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