2010-02-05 11 views
13

Estoy escribiendo una aplicación que puede comunicarse con mi PC. He usado las funcionalidades Bluetooth del SDK 2.1.Bluetooth -> descubrimiento de servicio fallido

Puedo encontrar dispositivos, obtener su dirección MAC, crear un socket RFCOMM, pero cuando comienzo la conexión, aparece el siguiente mensaje de error.

Error en el descubrimiento del servicio.

  1. ¿Es debido a la UUID, que no es lo mismo en mi solicitud y en mi PC?
  2. ¿Cómo puedo obtener el UUID correcto en mi PC?

Si escribo una de esas aplicaciones, ¿es mi Nexus One el cliente o el servidor?

+4

Tengo el mismo problema ... – Tomas

Respuesta

7

Bien, tengo el mismo problema, pero creo que puedo responder algunas de sus preguntas. Si su PC abrió un puerto SPP, por ejemplo, al usar "sdptool add --channel = 3 SP" su teléfono Android sería el cliente abriendo un socket y conectándose con este socket al servidor (su PC o cualquier otro dispositivo Bluetooth, por ejemplo, GPS, mouse, etc.).

, usted puede obtener esta información mediante la lectura del artículo Bluetooth, la definición de un cliente hizo saco de este artículo.

Si está abriendo un puerto SPP en el servidor (su PC, etc.) está ofreciendo un servicio estándar y hay un UUID especial asignado a este servicio. Esto sería: 00001101-0000-1000-8000-00805F9B34FB si no me equivoco.

Así que creo que deberíamos obtener una respuesta calificada de un desarrollador de Android. O haga esta pregunta el jueves durante el horario de oficina de IRC.

+2

¡Ese UUID especial funcionó para mi Arduino BT! ¡Gracias! – phreakhead

+3

Gracias philDev, el UUID "00001101-0000-1000-8000-00805F9B34FB" funcionó también para mí, ejecutando la aplicación de muestra BluetoothChat con una PC con emulación de terminal básica. –

2

Aunque podría ser su UUID, también le sugiero que se asegure de que el MAC Bluetooth sea preciso y esté en mayúsculas.

También le sugiero que ejecute hcidump -X en un terminal en la caja Linux, y vea si puede ver el tráfico bidireccional entre su máquina Linux y el teléfono durante todo el proceso.

1

Tuve el mismo problema al volver a conectar SPP después de la primera conexión.

Esto es porque rfcomm channel=-1 en BluetoothService.java. Agregué updateDeviceServiceChannelCache() al final de fetchRemoteUuids(), ¡y luego funcionó!

+0

¿Podría por favor elaborar esto? ¿Incluyó fuentes Android modificadas para su proyecto? ¿O cómo hiciste esto? – Blackhex

2

Encontré una forma de asegurarme de que el UUID se encuentra en el dispositivo. En el lado del cliente, antes de añadir device.createRfcommSocketToServiceRecord(uuid);:

Process process = Runtime.getRuntime().exec("su -c 'sdptool records " + device.getAddress() + "'"); 
process.waitFor(); 

El proceso se congela durante 20-30 segundos, ya que Android es ir a buscar los servicios. Pero después, si el servidor está en modo de descubrimiento (si el servidor es un teléfono con Android), ¡la conexión tiene éxito todo el tiempo!

+0

Necesita ser root – psv

4

Sugerencia: Si se está conectando a una placa serie Bluetooth, intente utilizar el conocido SPP UUID 00001101-0000-1000-8000-00805F9B34FB. Sin embargo, si se está conectando con un par de Android, genere su UUID único.

The Link

0

Esto sucede sobre todo a HTC. Me enfrenté al mismo problema. Si primero se conectó con éxito pero luego falla, simplemente reinicie el teléfono y el servicio que falló se reiniciará al hacerlo.

Cuestiones relacionadas