我正在尝试编写仅连接到运行Android 4.4 KitKat的Nexus 7上仅与我(目前)配对的设备的代码。无论我尝试了多少次,我仍然会遇到此错误。这是我尝试过的最后一个代码,似乎正在做我所看到的人们认为成功的所有事情。
有人可以指出我做错了什么吗?
BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter adapter = bluetoothManager.getAdapter();//BluetoothAdapter.getDefaultAdapter();
if (!adapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
BluetoothDevice bt = adapter.getBondedDevices().iterator().next();
BluetoothDevice actual = adapter.getRemoteDevice(bt.getAddress());
String str = "";
for(BluetoothDevice bd : adapter.getBondedDevices()) {
str += bd.getName() + "\n";
}
str+= actual;
textView.setText(str);
BluetoothSocket socket = actual.createInsecureRfcommSocketToServiceRecord(MY_UUID);
adapter.cancelDiscovery();
socket.connect();
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.print(message);
out.flush();
最佳答案
我使用ELM327 OBD蓝牙适配器遇到了完全相同的错误(IOException读取失败的套接字可能关闭或超时)。
UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
btDevice = btAdapter.getRemoteDevice(btDeviceAddress);
btAdapter.cancelDiscovery();
btSocket = btDevice.createRfcommSocketToServiceRecord(MY_UUID);
btSocket.connect();
ELM327将允许第一个连接并正确发送/接收,但只能发送一次。然后,所有以后的连接都将失败,并出现IOException。为了使其再次正常工作,我必须将ELM327与操作系统解除配对,然后才可以连接-仅一次!然后循环重复...
如上面的文章所述,该问题已解决-创建一个不安全的套接字。
btSocket = btDevice.createInsecureRfcommSocketToServiceRecord(MY_UUID);
关于java - 在BluetoothSocket.connect()上获取java.io.IOException : read failed,套接字可能已关闭或超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20028624/