Android Bluetooth – No se puede conectar

Estoy desarrollando una aplicación que usa Bluetooth para conectarme a un dispositivo y enviar / recibir datos. Estoy haciendo todas mis pruebas con un teléfono Nexus One.

Nunca he sido capaz de establecer una conexión SPP (puerto serie) desde mi teléfono a cualquier dispositivo. Sin embargo, he podido conectar desde un dispositivo (mi portátil) a mi teléfono usando un equivalente Mac de PuTTY (La única excepción a esto es la aplicación "Bluetooth File Transfer" del mercado parece funcionar, pero no Creo que usa RFCOM / SPP …).

Sigo viendo este mensaje en mis registros de LogCat:

ERROR/BluetoothService.cpp(78): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session) 

Así como estos:

 java.io.IOException: Operation Canceled java.io.IOException: Software caused connection abort 

He intentado usar el UUID de "00001101-0000-1000-8000-00805F9B34FB" y también he intentado usar el:

 Method m = device.getClass().getMethod("createRfcommSocket", new Class[] { int.class }); sock = (BluetoothSocket) m.invoke(device, Integer.valueOf(1)); 

Método en lugar de device.createRfcommSocketToServiceRecord(UUID); También – sin suerte.

Estoy usando el ejemplo de BluetoothChat y las variaciones de ese código para hacer todas mis pruebas …

Soluciones o sugerencias sería genial … o incluso un mejor / menos complejo ejemplo de algún código de prueba que se puede ejecutar en el teléfono, o un script python o algo que se puede ejecutar en mi computadora para ayudar a depurar?

¡Gracias! Espero que esto no sea un error con el sistema operativo Android, pero si es que espero encontrar una solución.


EDIT: También debo notar que la mayoría de los dispositivos aparecen como "emparejado, pero no conectado" en la configuración de Bluetooth.


EDIT 2: La solución parece ser simplemente desactivar cualquier Bluetooth escucha. Vea mi post de respuesta para más información.

2 Solutions collect form web for “Android Bluetooth – No se puede conectar”

La solución, como resultado, era desactivar la funcionalidad del servidor del servicio Bluetooth. Utilizando sólo createRfcommSocketToServiceRecord y nunca llamando a listenUsingRfcommWithServiceRecord (en el ejemplo de BluetoothChat esto significa que nunca se inicia el "AcceptThread") el problema fue solucionado.

A pesar de que estas dos llamadas se supone que están totalmente separados y no tienen ningún efecto sobre el otro (de acuerdo con los documentos Android), simplemente comentando listenUsingRfcommWithServiceRecord arregló mi problema supuestamente no relacionados.

Puedo tomar el programa de chat Bluetooth sin editar y no será capaz de establecer una conexión de salida a cualquier dispositivo bluetooth que he probado (ordenadores portátiles, equipos de escritorio, auriculares, etc), pero si me quita una cosa que funciona perfectamente como un cliente .

De todos modos, espero que esto ayude a alguien más si se encuentran con el mismo problema. Esto debe ser un error con el sistema operativo Android, o posiblemente el firmware en el Nexus One.

Ignoro el error stopDiscovery – es bueno que esté cancelando el descubrimiento antes de hacer su conexión. Por los documentos SDK:

Debido a que el descubrimiento es un precedente de peso pesado para el adaptador Bluetooth, este método siempre debe llamarse antes de intentar conectarse a un dispositivo remoto con connect (). Discovery no es administrado por la actividad, pero se ejecuta como un servicio del sistema, por lo que una aplicación siempre debe llamar a cancelar el descubrimiento, incluso si no solicitar directamente un descubrimiento, sólo para estar seguro.

Por lo tanto, con eso dicho, ¿fue capaz de obtener el ejemplo de Bluetooth Chat para trabajar antes de hacer cualquier modificación en el código?

El UUID que desea para SPP / RFCOMM es:

 static UUID UUID_RFCOMM_GENERIC = new UUID(0x0000110100001000L,0x800000805F9B34FBL); 

O definido de otra manera (ambos logran lo mismo).

 static final UUID UUID_RFCOMM_GENERIC = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 
  • Obtener UUIDs de G-Shock reloj bluetooth android
  • Android Encuentra el UUID de un dispositivo bluetooth específico
  • Cómo crear UUID de cadena en android
  • ¿Podemos usar Guid como clave principal en la base de datos de SQL Server?
  • Conexión de varios dispositivos al bluetooth en Android
  • Android bluetooth UUID que conecta APP a ANDROID
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.