Zanim aplikacja będzie mogła komunikować się przez Bluetooth lub Bluetooth Low Energy, musisz sprawdzić, czy urządzenie obsługuje Bluetooth i upewnić się, że jest on włączony. Pamiętaj, że to sprawdzenie jest konieczne tylko wtedy, gdy atrybut android:required
we wpisie pliku manifestu <uses-feature.../>
ma wartość false
.
Jeśli Bluetooth nie jest obsługiwany, wyłącz wszystkie jego funkcje. Jeśli Bluetooth jest obsługiwany, ale wyłączony, możesz poprosić użytkownika o jego włączenie bez wychodzenia z aplikacji.
Pierwszym krokiem jest dodanie uprawnień Bluetooth do pliku manifestu, aby można było używać poniższych interfejsów API.
Po przyznaniu uprawnień konfiguracja Bluetootha możesz wykonać w 2 krokach przy użyciu BluetoothAdapter
:
Pobierz
BluetoothAdapter
.Urządzenie
BluetoothAdapter
jest wymagane do wszystkich działań związanych z Bluetoothem.BluetoothAdapter
reprezentuje adapter Bluetooth (moduł radiowy Bluetooth) urządzenia. Aby uzyskaćBluetoothAdapter
, musisz najpierw miećContext
. Wykorzystaj ten kontekst, aby uzyskać instancję usługi systemowejBluetoothManager
. WywołanieBluetoothManager#getAdapter
daje obiektBluetoothAdapter
. JeśligetAdapter()
zwraca wartość null, urządzenie nie obsługuje Bluetootha.Na przykład:
Kotlin
val bluetoothManager: BluetoothManager = getSystemService(BluetoothManager::class.java) val bluetoothAdapter: BluetoothAdapter? = bluetoothManager.getAdapter() if (bluetoothAdapter == null) { // Device doesn't support Bluetooth }
Java
BluetoothManager bluetoothManager = getSystemService(BluetoothManager.class); BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter(); if (bluetoothAdapter == null) { // Device doesn't support Bluetooth }
Włącz Bluetooth.
Następnie upewnij się, że Bluetooth jest włączony. Zadzwoń pod numer
isEnabled()
, aby sprawdzić, czy Bluetooth jest obecnie włączony. Jeśli ta metoda zwraca wartość fałsz, Bluetooth jest wyłączony. Aby poprosić o włączenie Bluetootha, wywołaj metodęstartActivityForResult()
, przekazując intencjęACTION_REQUEST_ENABLE
. To połączenie wysyła prośbę o włączenie Bluetootha w ustawieniach systemu (bez zatrzymywania aplikacji).Na przykład:
Kotlin
if (bluetoothAdapter?.isEnabled == false) { val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE) startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT) }
Java
if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); }
Pojawi się okno z prośbą o zgodę użytkownika na włączenie Bluetootha, tak jak na ilustracji 1. Jeśli użytkownik przyzna uprawnienia, system rozpocznie włączanie Bluetootha, a po zakończeniu (lub niepowodzeniu) procesu powróci do aplikacji.
Rysunek 1. Okno włączania Bluetooth.
Stała REQUEST_ENABLE_BT
przekazywana do startActivityForResult()
jest lokalnie zdefiniowaną liczbą całkowitą, która musi być większa niż lub równa 0. System przekazuje tę stałą wartość z powrotem do Twojej implementacji onActivityResult()
jako parametr requestCode
.
Jeśli włączysz Bluetooth, aktywność otrzyma kod wyniku RESULT_OK
w wywołaniu zwrotnym onActivityResult()
. Jeśli Bluetooth nie został włączony z powodu błędu (lub użytkownik odpowiedział „Odmów”), kod wyniku to RESULT_CANCELED
.
Opcjonalnie aplikacja może też nasłuchiwać intencji transmisji ACTION_STATE_CHANGED
, która jest transmitowana przez system przy każdej zmianie stanu Bluetooth. Ta transmisja zawiera dodatkowe pola EXTRA_STATE
i EXTRA_PREVIOUS_STATE
, które zawierają odpowiednio nowy i stary stan Bluetootha. Możliwe wartości tych dodatkowych pól to STATE_TURNING_ON
, STATE_ON
, STATE_TURNING_OFF
i STATE_OFF
.
Nasłuchiwanie tej transmisji może być przydatne, jeśli aplikacja musi wykrywać zmiany w stanie działania Bluetooth w czasie działania.
Po włączeniu Bluetootha na urządzeniu możesz korzystać zarówno z Bluetootha, jak i Bluetootha Low Energy.
W przypadku klasycznej wersji Bluetooth możesz wyszukiwać urządzenia Bluetooth i łączyć się z urządzeniami Bluetooth.
W przypadku Bluetooth Low Energy możesz wyszukiwać urządzenia z BLE, łączyć się z serwerem GATT i przesyłać dane BLE.