2010-02-05 15 views
13

Sto scrivendo un'applicazione in grado di comunicare con il mio PC. Ho usato le funzionalità Bluetooth dell'SDK 2.1.Bluetooth -> rilevamento servizio non riuscito

Sono in grado di trovare i dispositivi, ottenere il loro indirizzo MAC, creare un socket RFCOMM, ma quando si avvia la connessione, viene visualizzato il seguente messaggio di errore.

Rilevamento del servizio non riuscito.

  1. E 'a causa della UUID, che non è lo stesso sulla mia applicazione e sul mio PC?
  2. Come posso ottenere l'UUID corretto sul mio PC?

Se scrivo una tale applicazione, è il mio Nexus One il client o il server?

+4

Ho lo stesso problema .. – Tomas

risposta

7

OK, ho avuto lo stesso problema, ma penso di poter rispondere ad alcune delle vostre domande. Se il tuo PC ha aperto una porta SPP, ad esempio, utilizzando "sdptool add --channel = 3 SP" il tuo telefono Android sarebbe il client che apre un socket e si connette con questo socket al server (il tuo PC o qualsiasi altro dispositivo Bluetooth, per esempio, GPS, mouse, ecc.).

È possibile ottenere queste informazioni leggendo l'articolo Bluetooth, la definizione di un client ho preso da questo articolo.

Se si sta aprendo una porta SPP sul server (PC, ecc.), Si offre un servizio standard e a questo servizio è assegnato un UUID speciale. Questo sarebbe: 00001101-0000-1000-8000-00805F9B34FB se non mi sbaglio.

Quindi penso che dovremmo ottenere una risposta qualificata da uno sviluppatore Android. Oppure fai questa domanda giovedì durante l'orario d'ufficio dell'IRC.

+2

Quell'UUID speciale ha funzionato per il mio Arduino BT! Grazie! – phreakhead

+3

Grazie a philDev, l'UUID "00001101-0000-1000-8000-00805F9B34FB" ha funzionato anche per me, eseguendo l'app di esempio BluetoothChat con un PC che esegue un'emulazione di base del terminale. –

2

Sebbene possa essere il tuo UUID, ti suggerisco anche di assicurarti che il Bluetooth MAC sia preciso e maiuscolo.

Vorrei anche suggerire di utilizzare hcidump -X in un terminale sulla scatola Linux e vedere se è possibile vedere qualsiasi traffico bidirezionale tra la macchina Linux e il telefono durante il processo.

1

Ho avuto lo stesso problema durante la riconnessione di SPP dopo il primo collegamento.

Questo è perché rfcomm channel=-1 in BluetoothService.java. Ho aggiunto updateDeviceServiceChannelCache() alla fine di fetchRemoteUuids() e poi ha funzionato!

+0

Potresti per favore elaborare questo? Hai incluso sorgenti Android modificate nel tuo progetto? O come hai fatto questo? – Blackhex

2

Ho trovato un modo per essere sicuro che l'UUID sia stato trovato sul dispositivo. Sul lato client, prima di aggiungere device.createRfcommSocketToServiceRecord(uuid);:

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

Il processo è bloccato durante 20-30 secondi, perché Android è il recupero dei servizi. Ma dopo, se il server è in modalità di rilevamento (se il server è un telefono Android), la connessione ha esito positivo ogni volta!

+0

È necessario essere root – psv

4

Suggerimento: se si effettua il collegamento a una scheda seriale Bluetooth, provare a utilizzare il noto SPP UUID 00001101-0000-1000-8000-00805F9B34FB. Tuttavia, se ti colleghi a un peer Android, genera il tuo UUID univoco.

The Link

0

Questa cosa accade soprattutto per HTC. Ho affrontato lo stesso problema. Se la connessione è avvenuta per la prima volta ma dopo un errore, riavviare il telefono e il servizio non funzionante verrà riavviato.

Problemi correlati