Excepción fallida de descubrimiento de servicio usando Bluetooth en Android

Actualmente estoy trabajando en una aplicación de Android que se conecta a un instrumento a través de Bluetooth y necesito escribir comandos de cadena y recibir respuestas de cadena. Actualmente tengo la conexión / lectura / escritura trabajando para TCP / IP a través de Wi-Fi y ahora estoy tratando de implementar Bluetooth. Pero me encuentro con algunos obstáculos. He estado buscando en la web tratando de encontrar ejemplos de algo similar y no he tenido suerte. He estado usando el ejemplo de recursos para desarrolladores de Android: Bluetooth Chat como mi principal punto de referencia.

Parece que mi código actual funciona ... Luego, arroja una excepción de Error de descubrimiento de servicio en el punto de conexión. Estoy usando elDeviceListActivity clase para hacer el descubrimiento y la selección del dispositivo al que me quiero conectar. Devuelve un resultado de actividad y luego mi clase de Bluetooth espera a que maneje eso y luego se conecta a él. El siguiente código es casi idéntico a la aplicación Bluetooth Chat.

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(!m_BluetoothAdapter.isEnabled())
    {
        m_BluetoothAdapter.enable();
    }
    switch (requestCode) {
        case REQUEST_CONNECT_DEVICE:
            // When DeviceListActivity returns with a device to connect
            if (resultCode == Activity.RESULT_OK) {
                // Get the device MAC address
                String address = data.getExtras()
                                     .getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
                // Get the BLuetoothDevice object
                BluetoothDevice device = m_BluetoothAdapter.getRemoteDevice(address);
                // Attempt to connect to the device
                connect(device);
            }
            break;

        case REQUEST_ENABLE_BT:
            // When the request to enable Bluetooth returns
            if (resultCode == Activity.RESULT_OK) {
                // Bluetooth is now enabled, so set up a chat session
            }
            else {
                // User did not enable Bluetooth or an error occured

                Toast.makeText(this, "Bluetooth not enabled", Toast.LENGTH_SHORT).show();
                finish();
            }
    }
}

Esta es mi función de conexión:

private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

private void connect(BluetoothDevice device) {
    m_Device = device;
    BluetoothSocket tmp = null;

    // Get a BluetoothSocket for a connection with the
    // given BluetoothDevice
    try {
        tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
    }
    catch (IOException e) {

    }
    m_Socket = tmp;

    m_BluetoothAdapter.cancelDiscovery();

    try {
        // This is a blocking call and will only return on a
        // successful connection or an exception
        m_Socket.connect();
    }
    catch (IOException e) {
        try {
            m_Socket.close();
        }
        catch (IOException e2) {
        }
        return;
    }
}

Con suerte, lo que sea que esté haciendo mal es simple, pero me temo que nunca es tan fácil. Esta es la primera vez que hago un desarrollo de Bluetooth, y tal vez estoy haciendo algo descaradamente incorrecto ... Pero no estoy seguro de por qué recibo la excepción fallida del descubrimiento del servicio.

Puede emparejar / encontrar el dispositivo en todo momento manualmente en el teléfono ... Requiere un código de acceso, pero no creo que ese sea el problema que estoy teniendo.

Respuestas a la pregunta(5)

Su respuesta a la pregunta