我在Android中设计了一个将移动设备连接到蓝牙设备的应用程序。我可以这样做,因为我打开这样的BluetoothSocket:
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
socket = (BluetoothSocket) m.invoke(device, 1);
socket.connect();
其中设备是需要移动蓝牙的配对设备。问题是,这个外部设备有点特殊,它有不同的时间写入和回答移动设备,所以我需要在我的插座上放一些超时读写,但我搜索了很多,似乎像 BluetoothSocket 不支持这个。
有人可以告诉我在Android上 BluetoothSocket 类上读取和写入端口时管理超时的不同方法吗?
谢谢!
答案 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;
}
}
问题在于我认为写作是有效的,因为我将所需的字符串转换为字节,并且它有效。但是,当我等待响应时,它会将所需的响应与所需的进一步混合,我认为这是因为时间安排。
中间没有更多与套接字相关的代码。首先,我创造它。然后,我尝试发送一个字节串。然后我等到收到刚刚发送的字节字符串的答案。
提前谢谢。