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?
Odpowiedz
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.
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
@Miky możesz pokazać nam swoją implementację – jaimin
@jaimin Niestety automatyczne połączenie Bluetooth nigdy nie działało dla mnie satysfakcjonująco.Musiał wybrać WiFi jako alternatywę. – Miky
Jest to możliwe, rzucić okiem na: http://developer.android.com /guide/topics/wireless/bluetooth.html –
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ł. –