2011-09-01 19 views
10

Sto sviluppando un'applicazione che dovrebbe collegare automaticamente 2 dispositivi Android tramite Bluetooth. Diciamo che sono già accoppiati. È possibile raggiungerlo?Come collegare programmaticamente 2 dispositivi Android con bluetooth?

+1

E 'possibile, dare un'occhiata a: http://developer.android.com /guide/topics/wireless/bluetooth.html –

+1

Al contrario, un'applicazione del genere, ad es. che è costantemente cercapersone per effettuare una connessione, influenzerà negativamente la durata della batteria. Non è una buona idea. –

risposta

18

Ovviamente è possibile. Prenderò un breve tutorial dalla documentazione:

Iniziare con BluetoothAdapter: è il tuo gestore Bluetooth.

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

Se bluetoothAdapter è nullo, significa che questo dispositivo Android non supporta il Bluetooth (Non ha una radio Bluetooth. Anche se penso che è raro incontrare questi dispositivi ...)

Quindi, assicurarsi che Bluetooth è attiva:

if (!bluetoothAdapter.isEnabled()) { 
     Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
     startActivityForResult(enableBtIntent, request_code_for_enabling_bt); 
} 

Se non è acceso, iniziamo l'attività che chiede all'utente di abilitarla.

Diciamo che l'utente ha abilitato (suppongo che si dovrebbe verificare se lo ha fatto, farlo nel tuo metodo onActivityResult). Siamo in grado di eseguire una query per i dispositivi accoppiati:

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBoundedDevices(); 

Poi ciclo su di loro: for(BluetoothDevice device : pairedDevices) e trovare quello che si desidera connettersi.

Una volta trovato un dispositivo, creare un socket per collegarlo:

BluetoothSocket socket = device.createRfcommSocketToServiceRecord(YOUR_UUID); 

YOUR_UUID è un oggetto UUID contiene un ID speciale della vostra applicazione. Leggi su di esso here.

Ora, tentativo di connessione (dispositivo che si sta tentando di connettersi a deve avere un socket creato con lo stesso UUID sulle modalità di ascolto):

socket.connect(); 

connect() blocchi tuo thread fino a quando una connessione è stabilito o si verifica un errore - in questo caso verrà generata un'eccezione. Quindi dovresti chiamare connect su un thread separato.

E lì! Sei connesso a un altro dispositivo. Ora ottieni i flussi di input e output:

InputStream is = socket.getInputStream(); 
OutputStream os = socket.getOutputStream(); 

e puoi iniziare a inviare/ricevere dati. Tieni presente che entrambe le azioni (invio e ricezione) sono bloccando quindi dovresti chiamarle da thread separati.

Per saperne di più su questo, e scoprire come creare il server (Qui abbiamo creato un client) nella Bluetooth documentation.

+1

grazie, l'ho già implementato nella mia applicazione qualche tempo fa ho capito tutto, tuttavia la tua risposta è molto buona e la segnalo come accettata. – Miky

+0

@Miky puoi mostrarci la tua implementazione – jaimin

+0

@jaimin Spiacente, la connessione Bluetooth automatica non ha mai funzionato soddisfacente per me.Ho dovuto scegliere il WiFi come alternativa. – Miky

Problemi correlati