读写时蓝牙插拔超时

时间:2011-10-18 09:52:52

标签: android

我在Android中设计了一个将移动设备连接到蓝牙设备的应用程序。我可以这样做,因为我打开这样的BluetoothSocket:

Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
socket = (BluetoothSocket) m.invoke(device, 1);
socket.connect();

其中设备是需要移动蓝牙的配对设备。问题是,这个外部设备有点特殊,它有不同的时间写入和回答移动设备,所以我需要在我的插座上放一些超时读写,但我搜索了很多,似乎像 BluetoothSocket 不支持这个。

有人可以告诉我在Android上 BluetoothSocket 类上读取和写入端口时管理超时的不同方法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

套接字或它的流可以抛出许多异常。例如,socket.connect()可以抛出ConnectTimeoutException。 BluetoothSocket上下文中的每个方法都可以通过IOException查看documentation,您将看到必须捕获的异常才能使程序正常运行。

答案 1 :(得分:0)

以下是用于读写代码的代码:

在端口上编写代码:

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;
     }
}

问题在于我认为写作是有效的,因为我将所需的字符串转换为字节,并且它有效。但是,当我等待响应时,它会将所需的响应与所需的进一步混合,我认为这是因为时间安排。

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

提前谢谢。