Komunikacja w tle

W tym przewodniku znajdziesz omówienie najważniejszych przypadków użycia związanych z komunikacją z urządzeniami peryferyjnymi, gdy aplikacja działa w tle:

Istnieje wiele opcji obsługi każdego z tych przypadków użycia. Każda z nich ma zalety i wady, które mogą sprawić, że będzie mniej lub bardziej 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 ma 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 tych interfejsów API, gdy aplikacja nie jest widoczna, ale oba wymagają, aby proces aplikacji był aktywny. Jeśli proces aplikacji nie jest uruchomiony, możesz skorzystać z tych obejść:

Połącz się z urządzeniem

Aby połączyć się z urządzeniem po jego znalezieniu, musisz uzyskać instancję BluetoothDevice dla urządzenia 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ść logiczna przekazywana do 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 bezpośrednio z urządzeniem peryferyjnym, która kończy się niepowodzeniem, jeśli urządzenie jest niedostępne. W przypadku rozłączenia klient GATT nie próbuje automatycznie połączyć się ponownie.
  • Połącz automatycznie (autoconnect = true): próba automatycznego połączenia z urządzeniem peryferyjnym, gdy jest ono dostępne. W przypadku rozłączenia zainicjowanego przez urządzenie peryferyjne lub spowodowanego tym, że urządzenie peryferyjne jest poza zasięgiem, klient GATT automatycznie próbuje ponownie nawiązać połączenie, gdy urządzenie peryferyjne jest dostępne.

W tle

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

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

Utrzymywanie połączenia z urządzeniem

Najlepiej, aby aplikacje utrzymywały połączenia z urządzeniami peryferyjnymi tylko tak długo, jak jest to konieczne, i rozłączały się po zakończeniu zadania. Istnieją 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,

Znalezienie urządzenia, połączenie się z nim i przesłanie danych jest czasochłonne i wymaga wielu zasobów. Aby uniknąć utraty połączenia i konieczności powtarzania całego procesu za każdym razem, gdy użytkownik przełącza się między aplikacjami lub wykonuje kilka zadań jednocześnie, należy utrzymywać połączenie do momentu zakończenia operacji. Możesz użyć usługi działającej na pierwszym planie typu connectedDevice lub interfejsu API obecności urządzenia towarzyszącego.

Podczas odsłuchiwania powiadomień z urządzeń peryferyjnych

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

W obu przypadkach możesz ponownie połączyć się po zakończeniu procesu, postępując zgodnie z instrukcjami w sekcji Łączenie z urządzeniem.