我正在用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/

10-09 19:59