Android Bluetoothsocket读写超时

Android Bluetoothsocket读写超时,android,Android,我正在设计一款Android应用程序,将手机连接到蓝牙设备。我可以这样做,因为我打开了一个蓝牙插座,如下所示: Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}); socket = (BluetoothSocket) m.invoke(device, 1); socket.connect(); 其中,device是与所需的移动蓝牙配对的设备。问题是,这个外部设备有点特殊,它

我正在设计一款Android应用程序,将手机连接到蓝牙设备。我可以这样做,因为我打开了一个蓝牙插座,如下所示:

Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
socket = (BluetoothSocket) m.invoke(device, 1);
socket.connect();
其中,device是与所需的移动蓝牙配对的设备。问题是,这个外部设备有点特殊,它有不同的时间来写和回复手机,所以我需要在我的套接字上设置一些超时来读和写,但是我搜索了很多,看起来BluetoothSocket不支持这个

有人能告诉我一种不同的方式来管理Android BluetoothSocket类端口的读写超时吗


谢谢大家!

套接字或其流可以抛出许多异常。例如,
socket.connect()。BluetoothSocket上下文中的每个方法都可以通过
IOException
查看,您将看到为了使程序正常工作,必须捕获哪些异常。

以下是读写代码的代码:

正在端口上写入代码:

try
{
    // Enviamos los bytes
    DataOutputStream dOut = null;
    dOut = new DataOutputStream(socket.getOutputStream());
    // Send message
    dOut.writeBytes(res);
    dOut.flush();
}
catch (IOException e)
{
    Dialogs.showErrorDialog("Error al recuperar la fecha y hora del dispositivo Nonin.", this);
}
然后,从端口读取,直到响应可用:

DataInputStream dIn = null;
// We receive the answer
try
{
     dIn = new DataInputStream(socket.getInputStream());
}
catch (IOException e)
{
    Dialogs.showAlertDialog("An exception occured during bluetooth io stream creation", this);
}

while (true)
{
    try
    {
         String data = dIn.readLine(); // readLine();
         byte[] total = EncodingUtils.getBytes(data, "ASCII");
         Dialogs.showInfoDialog("Mensaje ok: " + data.toString(), this);
    }
    catch (IOException e)
    {
          break;
     }
}
问题是,当我将所需的字符串转换为字节时,我认为写操作是有效的,并且它是有效的。但是,当我等待响应时,它将进一步的响应与期望的混合在一起,我认为这是因为时间安排

在中间没有与套接字相关的代码。首先,我创建它。然后,我尝试发送一个字节字符串。然后,我等待直到收到刚才发送的字节字符串的答案


提前谢谢。

哦,我可以补充一些信息。我可以在.Net上使用一个普通的套接字来实现这一点,在这里我可以管理超时,然后它工作得很好,但我不知道如何解决这个问题。可能是以不同的方式连接到其他蓝牙设备???>_您当前是否使用此代码超时?它是在尝试连接时超时还是稍后在I/O时超时?不,我在这段代码中不管理超时。因为我不知道怎么。。。有什么帮助吗?但它不会引发任何异常。我需要做的是处理端口超时。。。你知道有没有可能吗?对不起。字节[]数组应该包含我需要的信息。我一步一步地调试项目,但收到的字节[]不是所需的。它将更多的信息与所需的信息混合在一起。问题是:5秒钟后,蓝牙设备停止接收配置请求,只发送信息。所以,你可以想象为什么在这个插座中管理时间对我来说如此重要。。。