我正在用android上的蓝牙做一些事情,我想连接到发现的设备之一,并向它打开套接字连接。
我已授予所有必需的权限:Bluetooth,Bluetooth_Admin,Access_Fine_Location和Access_Coarse_Location,并在我对蓝牙进行任何操作之前先询问它们。
现在,我发现了一些带有adapter.startDiscovery();
和activity.registerReceiver(receiver, filter);
的设备
在接收器中找到某个名称的设备,我尝试像这样连接到该设备:
adapter.cancelDiscovery();
Log.d(TAG, "Create Bond");
device.createBond();
try {
socket = device.createRfcommSocketToServiceRecord(uuid);
Log.d(TAG, "Sleep 10");
sleep(10000);
Log.d(TAG, "Create Socket");
//socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
Log.d(TAG, "Connect socket");
socket.connect();
Log.d(TAG, "Connecting Done");
} catch (Exception e) {
Log.d(TAG, "Failed to connect to device", e);
try {
socket.close();
} catch (Exception e2) {
Log.d(TAG, "Failed to close socket", e2);
}
}
这是一个测试代码,我正在尝试使用该代码创建一个套接字并打开一个连接。
我在.connect()上收到以下异常:
java.io.IOException:读取失败,套接字可能关闭或超时,读取
ret:-1
在android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:684)
在android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:696)
在android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:373)
我究竟做错了什么。
我连接的蓝牙设备是Android移动设备,但是我计划在设法获得连接时使用其他设备。
更新1:
Android版本是7.0
最佳答案
使用fetchUuidsWithSdp()
和getUuids()
查找所有已发布的服务及其关联的UUID值。
关于java - Android BluetoothSocket无法连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57909535/