Conexión Bluetooth de Android: falla en la detección del servicio

Estoy tratando de crear una aplicación básica de bluetooth, para probar el dispositivo.

Tengo el código de developer.android. Aquí está el enlace: http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices

Aquí se ejecuta parte de mi código de subproceso:

public void run() { mBluetoothAdapter.cancelDiscovery(); Log.i(TAG, "Discovery Cancel!"); try { Log.i(TAG, "Connection Started"); mmSocket.connect(); Log.i(TAG, "Connection Ended"); } catch (IOException e) { try { Log.e(TAG, "Connection Failed", e); mmSocket.close(); } catch (IOException e2) { Log.e(TAG, "Connection Close Failed", e2); } return; } 

Lo que he intentado mmSocket.connect(); Nunca funciona Siempre lanza una IOException y obtengo ese registro de mi logcat:

java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:403)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:213)

He mirado estos artículos, y he probado las cosas escritas, ninguna de ellas ha resuelto mi problema.

Android Bluetooth: falla en el descubrimiento del servicio, conexión a escritorio / portátil

El descubrimiento de servicio falló la excepción utilizando Bluetooth en Android

La conexión Bluetooth en Android ICS no es posible

Android Bluetooth java.io.IOException: Conexión rechazada?

Btw Estoy trabajando en android ics 4.0.4.

Sé que no es un problema de dispositivo, porque he probado esta aplicación en diferentes dispositivos.

No lo sé y todavía no entiendo las cosas de UUID, pero el problema era el UUID. Estoy usando el UUID que obtuve de los registros del kernel y es 00001105-0000-1000-8000-00805F9B34FB .

Funciona para mi

 BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID); Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); socket = (BluetoothSocket) m.invoke(device, 1); bluetoothAdapter.cancelDiscovery(); socket.connect(); 

El siguiente fragmento de código funciona para mí. Intentalo…

 BluetoothDevice mmDevice; boolean temp = mmDevice.fetchUuidsWithSdp(); UUID uuid = null; if( temp ){ uuid = mmDevice.getUuids()[0].getUuid(); } tmp = device.createRfcommSocketToServiceRecord(uuid); 

He trabajado a través de un proceso de aprendizaje similar. He tratado de documentar lo que aprendí en una serie de ejemplos.

Este podría ser de ayuda:

http://digitalhacksblog.blogspot.com/2012/05/android-example-bluetooth-simple-spp.html

Es para establecer una conexión sencilla entre un dispositivo Android y un PC a través de bluetooth. Los ejemplos contienen los archivos de Android, así como un servidor SPP en java y uno en perl para el PC.

Espero que esto ayude.

Asegúrese de que su aplicación no está intentando conectarse mientras el adaptador está ocupado con el descubrimiento: Parece que el problema fue que antes de llamar

 clientSocket.connect() 

Necesitaba llamar

 btAdapter.cancelDiscovery() 

Esto ayudó a resolver el mismo problema para mí Matts Reco

Deberá proporcionar un UUID válido para el descubrimiento del servicio.

 BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID); 

Existen varios UUID comunes para varios servicios bluetooth estándar (predeterminados) (Manos libres, Transferencia de archivos, etc.).

Mira aquí

Intente usar el proyecto de ejemplo de Chat Bluetooth proporcionado como parte del SDK si está intentando probar el dispositivo. El código que está intentando usar y el proporcionado en developer.android.com se incluyen en el ejemplo de Bluetooth Chat.

  • Javax.net.ssl.SSLException: No certificado de servidor de confianza
  • Sockets sin procesar en Android
  • Android BluetoothSocket OutputStream escribe bloques de forma infinita
  • Imprima un archivo PDF en una impresora usando PrintWriter a través de una conexión de socket
  • Carga de datos desde la aplicación de Android al programa de escritorio
  • Android: los sockets nativos no eliminan el modo de suspensión 3G en el primer intento
  • Cómo importar el formato android.os.bundle en proyectos normales de java?
  • Dispositivos Android conectados con NSD, cómo enviar mensajes utilizando sockets (Client-Client)?
  • ¿Debo usar GCM para la comunicación en tiempo real entre dispositivos?
  • Lea desde InputStream usando lectura contra IOUtils.copy
  • Problema con el archivo de envío de Bluetooth de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.