2012-08-23 14 views
7

Estoy intentando crear una aplicación de bluetooth básica para probar el dispositivo.Conexión de Android con Bluetooth: no se pudo detectar el servicio

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

aquí es ejecutar parte de mi código de rosca:

 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; 
     } 

Todo lo que he intentado mmSocket.connect(); nunca funciona. Siempre lanza una IOException y me sale ese tronco 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 en estos artículos, y trató de lo que está escrito, ninguno de ellos ha resuelto mi problema.

Android Bluetooth: Service Discovery Failed, connection to Desktop/Laptop

Service discovery failed exception using Bluetooth on Android

Bluetooth connection on Android ICS not possible

Android Bluetooth java.io.IOException: Connection refused?

Por cierto estoy trabajando en Android ICS 4.0.4.

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

Respuesta

5

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

0

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

BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID); 

Hay varias UUID comunes para varios servicios estándar (por defecto) Bluetooth (manos libres, transferencia de archivos, etc.).

See here

0

Trate de usar el proyecto de Chat muestra de Bluetooth proporciona como parte del SDK si usted está tratando de probar el dispositivo. El código que está tratando de usar y el que se proporciona en developer.android.com se incluyen en el ejemplo de Bluetooth Chat.

+0

yo ya estoy aplicando esos ejemplos de código, pero el resultado es siempre igual. – juliadream

1

Trabajé a través de un proceso de aprendizaje similar. Intenté documentar lo que aprendí en una serie de ejemplos.

Ésta podría ser de ayuda:

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

Es para establecer una conexión simple 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 PC.

Espero que esto ayude.

+0

Estoy trabajando en esto, pero todavía no funciona, creo que estoy haciendo cosas terriblemente mal. Gracias por tu interés. – juliadream

1

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

clientSocket.connect() 

que necesitaba para llamar

btAdapter.cancelDiscovery() 

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

2

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

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

estuvo luchando durante horas y su "mmDevice.getUuids() [0] .getUuid()" resolvió mi problema. Ahora necesito entender tu lógica 'if (temp)' –

5

su funcionamiento para mí

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(); 
+1

Funcionó para mí también. – DragonT

Cuestiones relacionadas