Komunikacja w tle

W tym przewodniku znajdziesz omówienie sposobów obsługi kluczowych zastosowań komunikacji z urządzeniami peryferyjnymi, gdy aplikacja działa w tle:

Każdy z tych przypadków użycia obsługuje się na kilka sposobów. Każda z nich ma swoje zalety i wady, które mogą sprawiać, że będzie ona bardziej lub mniej odpowiednia do Twoich potrzeb.

Poniższy diagram przedstawia uproszczony widok wskazówek na tej stronie:

Znajdź urządzenie

Najpierw aplikacja musi znaleźć urządzenie, z którym się połączy. Aby znaleźć urządzenie BLE, możesz użyć jednego z tych interfejsów API:

W tle

Nie ma żadnych ograniczeń dotyczących korzystania z żadnego z tych interfejsów API, gdy aplikacja jest niewidoczna, ale oba wymagają, aby proces aplikacji był aktywny. Jeśli proces aplikacji nie działa, możesz użyć tych obejść:

Połącz się z urządzeniem

Aby połączyć się z urządzeniem po jego znalezieniu, musisz pobrać instancję BluetoothDevice z jednego z tych źródeł:

Gdy masz instancję BluetoothDevice, możesz rozpocząć żądanie połączenia z odpowiednim urządzeniem, wywołując jedną z metod connectGatt(). Wartość przekazana do atrybutu logicznego autoConnect określa, którego z tych 2 trybów połączenia używa klient GATT:

  • Połączenie bezpośrednie (autoconnect = false): próba połączenia z urządzeniem peryferyjnym bezpośrednio, która kończy się niepowodzeniem, jeśli urządzenie jest niedostępne. W przypadku rozłączenia klient GATT nie próbuje automatycznie nawiązać ponownego połączenia.
  • Łączenie automatyczne (autoconnect = true): automatyczne łączenie się z urządzeniem peryferyjnym, gdy jest ono dostępne. W przypadku rozłączenia zainicjowanego przez urządzenie peryferyjne lub gdy urządzenie peryferyjne znajduje się poza zasięgiem, klient GATT automatycznie próbuje nawiązać połączenie, gdy urządzenie peryferyjne będzie dostępne.

W tle

Nie ma żadnych ograniczeń dotyczących łączenia się z urządzeniem, gdy aplikacja działa w tle, ale połączenie zostanie zamknięte, jeśli proces zostanie zatrzymany. Dodatkowo istnieją ograniczenia dotyczące uruchamiania działań (w Androidzie 10 i nowszych wersjach) lub usług na pierwszym planie (w Androidzie 12 i nowszych wersjach) w tle.

Aby nawiązać połączenie w tle, aplikacje mogą korzystać z tych rozwiązań:

Nie rozłączaj się z urządzeniem

W idealnej sytuacji aplikacje powinny utrzymywać połączenia z urządzeniami peryferyjnymi tylko przez czas niezbędny do wykonania zadania i odłączać je po jego zakończeniu. Są jednak 2 przypadki, w których aplikacja może potrzebować stałego połączenia:

W obu przypadkach dostępne są te opcje:

Podczas przełączania się między aplikacjami

Wyszukiwanie urządzenia, nawiązywanie z nim połączenia i przenoszenie danych zajmuje dużo czasu i zasobów. Aby uniknąć utraty połączenia i konieczności wykonania całego procesu za każdym razem, gdy użytkownik przełącza się między aplikacjami lub wykonuje zadania jednocześnie, należy utrzymać połączenie do czasu zakończenia operacji. Możesz użyć usługi na pierwszym planie typu connectedDevice lub interfejsu API obecności urządzenia towarzyszącego.

Podczas słuchania powiadomień z urządzeń peryferyjnych

Aby słuchać powiadomień peryferyjnych, aplikacja musi wywołać funkcję setCharacteristicNotification(), słuchać wywołań zwrotnych za pomocą funkcji onCharacteristicChanged() i utrzymywać połączenie. W przypadku większości aplikacji najlepiej jest obsługiwać ten przypadek użycia za pomocą CompanionDeviceService, ponieważ aplikacja prawdopodobnie będzie musiała przez długi czas nasłuchiwać. Możesz jednak użyć usługi na pierwszym planie.

W obu przypadkach po zakończeniu procesu możesz ponownie połączyć konto, wykonując instrukcje podane w sekcji Łączenie z urządzeniem.