2010-10-13 5 views
5

Sto provando a creare un semplice programma che analizza un auricolare bluetooth (sto testando con un auricolare PS3) e quindi mi collego ad esso. Sto usando il codice dallo bluetooth chat program example. Tuttavia non riesco a collegarlo a nulla. Mi sta dando un'eccezione I/O quando arriva a connect().Connetti/Accoppia auricolare Bluetooth e Android

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

Questo thread viene eseguito durante il tentativo di stabilire una connessione in uscita con un dispositivo. Funziona dritto attraverso; la connessione ha esito positivo o negativo.

private class ConnectThread extends Thread { 
    private final BluetoothSocket mmSocket; 
    private final BluetoothDevice mmDevice; 

    public ConnectThread(BluetoothDevice device) { 
     mmDevice = device; 
     BluetoothSocket tmp = null; 

     // Get a BluetoothSocket for a connection with the given BluetoothDevice 
     try { 
      tmp = device.createRfcommSocketToServiceRecord(MY_UUID); 
     } catch (IOException e) { 
      Log.e(TAG, "create() failed", e); 
     } 
     if (tmp == null){ 
      Log.i(TAG, "tmp is NULL"); 
     } 
     mmSocket = tmp; 
    } 

    public void run() { 
     Log.i(TAG, "BEGIN mConnectThread"); 
     setName("ConnectThread"); 

     // Always cancel discovery because it will slow down a connection 
     mAdapter.cancelDiscovery(); 
     Log.i(TAG, "discovery is cancelled"); 

     // Make a connection to the BluetoothSocket 
     try { 
      // This is a blocking call and will only return on a successful connection or an exception 
      mmSocket.connect(); //Doesn't like something here??? 
     } catch (IOException e) { 
      Log.e(TAG, "IO error, ", e); 
      connectionFailed(); 
      // Close the socket 
      try { 
       mmSocket.close(); 
      } catch (IOException e2) { 
       Log.e(TAG, "unable to close() socket during connection failure", e2); 
      } 
      // Start the service over to restart listening mode 
      newTBluetoothService.this.start(); 
      return; 
     } 

     // Reset the ConnectThread because we're done 
     synchronized (newBluetoothService.this) { 
      mConnectThread = null; 
     } 

     // Start the connected thread 
     connected(mmSocket, mmDevice); 
    } 

    public void cancel() { 
     try { 
      mmSocket.close(); 
     } catch (IOException e) { 
      Log.e(TAG, "close() of connect socket failed", e); 
     } 
    } 
} 

Ecco il logcat:


10-13 16:07:45.544: ERROR/BluetoothService.cpp(1259): 
stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session) 

10-13 16:07:45.544: DEBUG/newBluetoothService(2821): connect to: 00:22:A6:07:12:2B 

10-13 16:07:45.544: DEBUG/newBluetoothService(2821): setState() 0 -> 2 

10-13 16:07:45.552: INFO/newBluetoothService(2821): BEGIN mConnectThread 

10-13 16:07:45.567: ERROR/BluetoothService.cpp(1259): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session) 

10-13 16:07:45.567: INFO/newBluetoothService(2821): discovery is cancelled 

10-13 16:07:45.575: ERROR/BluetoothEventLoop.cpp(1259): onCreateDeviceResult: D-Bus error: org.bluez.Error.AlreadyExists (Device already exists) 

10-13 16:07:45.583: INFO/BluetoothNew(2821): MESSAGE_STATE_CHANGE: 2 

10-13 16:07:46.700: ERROR/BluetoothEventLoop.cpp(1259): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/2872/hci0/dev_00_22_A6_07_12_2B 

10-13 16:07:47.036: DEBUG/BluetoothService(1259): updateDeviceServiceChannelCache(00:22:A6:07:12:2B) 

10-13 16:07:47.059: DEBUG/BluetoothService(1259):  uuid(system): 0000111e-0000-1000-8000-00805f9b34fb 1 

10-13 16:07:47.067: DEBUG/BluetoothService(1259):  uuid(system): 00001108-0000-1000-8000-00805f9b34fb 2 

10-13 16:07:47.075: VERBOSE/BluetoothEventRedirector(1786): Received android.bleutooth.device.action.UUID 

10-13 16:07:47.075: DEBUG/BluetoothService(1259): Cleaning up failed UUID channel lookup: 00:22:A6:07:12:2B 00001101-0000-1000-8000-00805f9b34fb 

10-13 16:07:47.083: ERROR/newBluetoothService(2821): IO error, 

10-13 16:07:47.083: ERROR/newBluetoothService(2821): java.io.IOException: Service discovery failed 

10-13 16:07:47.083: ERROR/newBluetoothService(2821):  at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:377) 

10-13 16:07:47.083: ERROR/newBluetoothService(2821):  at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:201) 

10-13 16:07:47.083: ERROR/newBluetoothService(2821):  at com.nmtransfer.bluetooth.newBluetoothService$ConnectThread.run(newBluetoothService.java:347) 

10-13 16:07:47.083: INFO/newBluetoothService(2821): Connection Failed 

10-13 16:07:47.083: DEBUG/newBluetoothService(2821): setState() 2 -> 1 

10-13 16:07:47.083: DEBUG/newBluetoothService(2821): start 

10-13 16:07:47.083: INFO/BluetoothNew(2821): MESSAGE_STATE_CHANGE: 1 

10-13 16:07:47.098: DEBUG/BluetoothService(1259): new handle 1000d 

10-13 16:07:47.106: DEBUG/newBluetoothService(2821): setState() 1 -> 1 

10-13 16:07:47.106: DEBUG/newBluetoothService(2821): BEGIN mAcceptThreadThread[Thread- 
13,5,main] 

10-13 16:07:47.114: INFO/BluetoothNew(2821): MESSAGE_STATE_CHANGE: 1 

10-13 16:07:51.036: ERROR/BluetoothEventLoop.cpp(1259): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/2872/hci0/dev_00_22_A6_07_12_2B 

10-13 16:07:53.583: VERBOSE/BluetoothEventRedirector(1786): Received android.bleutooth.device.action.UUID 

Ogni aiuto è molto apprezzato.

Grazie Chris

+0

Sto testando un Droid X con l'aggiornamento 2.2 e un auricolare Bluetooth PS3. Viene abbinato ma non si connetterà. Posso collegare manualmente l'auricolare quando vado nelle impostazioni Bluetooth. –

risposta

1

ho pensato che non si dovrebbe assegnare un UUID specifica come param collegamento tranne che sai che questo è il GUID esatto fornito dal proprio auricolare. Non sono sicuro. Ma spero possa aiutarti.

Buona fortuna!

Fancy

2

@CHRIS Hey Io in realtà appena capito il problema. Colpisci l'unghia in testa con il ConnectThread, tuttavia è necessario utilizzare l'UUID ("00001108-0000-1000-8000-00805F9B34FB") per il profilo della cuffia. Sto usando un auricolare Jabra e funziona per me. Fammi sapere se hai domande! Grazie!

+0

Alcuni auricolari bluetooth potrebbero non fornire questo UUID profilo, sebbene sia il profilo di base per questo scopo. Tuttavia, poiché il profilo di livello "più alto" per l'utilizzo del kit per auto aggiunge alcune caratteristiche interessanti (numero di ricomposizione dell'ultimo numero, ecc.), Provare prima a HandsFreeProfile (HFP) con UUID "0000111E-ballo1000-8000-00805F9B34FB". – Schlangi

1

Sto studiando anche un problema simile ... - Come collegare il profilo Auricolare tramite APP. e poi ho visto questa risposta qui: https://stackoverflow.com/a/5711736/769556

Fondamentalmente questo collegamento profilo del livello auricolare è fatto internamente da Android (e non ci sono l'accesso a livello di applicazione per stabilire connessioni)

così. .. @ Chris Mattmiller hai trovato una risposta diversa?