Android BluetoothSocket.isConnected始终返回false

jka*_*001 8 api android bluetooth

我正在尝试检测蓝牙设备当前是否使用API​​ 14或更高版本连接到Android设备.看起来我应该能够使用BluetoothSocket.isConnected()方法,但不管我做了什么,到目前为止,我只是因为任何事情得到了回报,无论是否连接.

AndroidManifest包含以下行:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<!-- Locale 4.x supports API 14 or greater. -->
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />

<uses-feature android:name="android.hardware.bluetooth" />
Run Code Online (Sandbox Code Playgroud)

并且有问题的代码:

protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();

    for (BluetoothDevice device : pairedDevices) {
        Log.i(Constants.LOG_TAG, String.format(Locale.US, "Device: %s connected: %b", device.getName(), isConnected(device))); //$NON-NLS-1$z
    }
}

private boolean isConnected(BluetoothDevice device) {
    BluetoothSocket socket = null;

    // Get a BluetoothSocket for a connection with the given BluetoothDevice
    UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    try {
        socket = device.createRfcommSocketToServiceRecord(SPP_UUID);
    } catch (IOException e) {
        Log.e(Constants.LOG_TAG, e.getMessage()); //$NON-NLS-1$z
        return false;
    }

    Log.i(Constants.LOG_TAG, socket.toString()); //$NON-NLS-1$z

    return socket.isConnected();
}
Run Code Online (Sandbox Code Playgroud)

不会抛出任何错误,它只会在100%的时间内返回"false".有什么东西我做得不对吗?

Ame*_*een 0

首先,为什么要使用反射?!这对我来说是一个危险信号。API 允许您通过蓝牙与另一个设备通信,请参阅此链接,这样您就不应该使用反射。

套接字在connect调用其方法之前始终会返回未连接。您的代码似乎获取了套接字,但从未尝试与其建立连接。您首先需要调用此方法