2011-09-01 14 views
10

Pracuję nad aplikacją, która powinna automatycznie łączyć 2 urządzenia z systemem Android przez Bluetooth. Załóżmy, że są już sparowane. Czy można to osiągnąć?Jak programowo podłączyć 2 urządzenia z systemem Android przez Bluetooth?

+1

Jest to możliwe, rzucić okiem na: http://developer.android.com /guide/topics/wireless/bluetooth.html –

+1

Z drugiej strony, taka aplikacja, np. ciągłe przywoływanie w celu nawiązania połączenia będzie miało negatywny wpływ na żywotność baterii. To nie jest dobry pomysł. –

Odpowiedz

18

Oczywiście jest to możliwe. Zrobię krótki instruktaż z dokumentacji:

Zacznij od BluetoothAdapter - to jest twój menedżer Bluetooth.

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

Jeśli bluetoothAdapter jest zerowy, to znaczy, że to urządzenie z Androidem nie obsługuje Bluetooth (Nie ma radia Bluetooth. Chociaż myślę, że rzadko zdarza się spotkać tych urządzeń ...)

Następnie upewnij się, Bluetooth jest włączony:

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

Jeśli nie jest on, rozpoczynamy działalność, która pyta użytkownika, aby ją włączyć.

Załóżmy, że użytkownik aktywował (domyślam się, że powinien to sprawdzić, zrób to w swojej metodzie onActivityResult). Możemy zapytać o sparowanych urządzeń:

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

Następnie w pętli nad nimi: for(BluetoothDevice device : pairedDevices) i znaleźć taki, który chcesz połączyć.

Po znalezieniu urządzenia, utwórz go podłączyć do gniazda:

BluetoothSocket socket = device.createRfcommSocketToServiceRecord(YOUR_UUID); 

YOUR_UUID jest obiektem UUID zawierający specjalny identyfikator aplikacji. Przeczytaj o tym here.

Teraz próba połączenia (Urządzenie próbujesz połączyć się musi mieć gniazdo utworzone z tym samym UUID w trybie słuchania):

socket.connect(); 

connect() bloki swój wątek aż do połączenia zostanie ustanowiony lub wystąpi błąd - w tym przypadku zostanie zgłoszony wyjątek. Więc powinieneś zadzwonić pod numer connect w osobnym wątku.

I tam! Jesteś podłączony do innego urządzenia. Teraz pobierz strumienie wejściowe i wyjściowe:

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

i możesz rozpocząć wysyłanie/odbieranie danych. Pamiętaj, że obie akcje (wysyłanie i odbieranie) to blokowanie, więc powinieneś zadzwonić do nich z oddzielnych wątków.

Czytaj więcej na ten temat oraz dowiedzieć się, jak stworzyć serwer (Tutaj stworzyliśmy klient) w Bluetooth documentation.

+1

dziękuję, już to zaimplementowałem w mojej aplikacji jakiś czas temu wymyśliłem to wszystko, jednak twoja odpowiedź jest bardzo dobra i zaznaczam ją jako zaakceptowaną. – Miky

+0

@Miky możesz pokazać nam swoją implementację – jaimin

+0

@jaimin Niestety automatyczne połączenie Bluetooth nigdy nie działało dla mnie satysfakcjonująco.Musiał wybrać WiFi jako alternatywę. – Miky

Powiązane problemy