Typy usług działających na pierwszym planie

Począwszy od Androida 14 (interfejs API na poziomie 34), musisz zadeklarować odpowiedni typ usługi dla każdej usługi działającej na pierwszym planie. Oznacza to, że musisz zadeklarować typ usługi w pliku manifestu aplikacji, a także poprosić o odpowiednie uprawnienie usługi na pierwszym planie dla tego typu (oprócz prośby o uprawnienie FOREGROUND_SERVICE). Dodatkowo w zależności od typu usługi na pierwszym planie przed jej uruchomieniem może być konieczne poproszenie o uprawnienia w czasie działania.

typach usług działających na pierwszym planie.

Aparat

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w sekcji android:foregroundServiceType
camera
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_CAMERA
Stała do przekazania do startForeground()
FOREGROUND_SERVICE_TYPE_CAMERA
Wymagania wstępne dotyczące środowiska wykonawczego

Poproś o uprawnienie czasu działania CAMERA i uzyskaj je.

Opis

Dalsze korzystanie w tle z aparatu, np. w aplikacjach do obsługi czatu wideo, które umożliwiają wielozadaniowość.

Połączone urządzenie

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w domenie
android:foregroundServiceType
connectedDevice
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_CONNECTED_DEVICE
Stała do przekazywania do: startForeground()
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
Wymagania wstępne środowiska wykonawczego

Musi być spełniony co najmniej jeden z tych warunków:

Opis

Dotyczy to interakcji z urządzeniami zewnętrznymi, które wymagają łączności Bluetooth, NFC, podczerwieni, USB lub połączenia sieciowego.

Alternatywy

Jeśli aplikacja musi stale przesyłać dane na urządzenie zewnętrzne, rozważ użycie menedżera urządzeń towarzyszących. Użyj interfejsu API obsługi towarzyszącej urządzenia, aby Twoja aplikacja działała, gdy urządzenie towarzyszące znajduje się w zasięgu.

Jeśli aplikacja musi skanować w poszukiwaniu urządzeń Bluetooth, rozważ użycie interfejsu API skanowania Bluetooth.

Synchronizowanie danych

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w sekcji
android:foregroundServiceType
dataSync
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_DATA_SYNC
Stała do przekazania do startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
Wymagania wstępne dotyczące środowiska wykonawczego
Brak
Opis

Operacje przesyłania danych, takie jak:

  • Przesyłanie i pobieranie danych
  • Operacje tworzenia i przywracania kopii zapasowych
  • Operacje importowania i eksportowania
  • Pobieranie danych
  • Przetwarzanie plików lokalnych
  • Przesyłanie danych między urządzeniem a chmurą przez sieć
Alternatywy

Szczegółowe informacje znajdziesz w artykule Alternatywy dla usług na pierwszym planie do synchronizacji danych.

Stan

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w sekcji
android:foregroundServiceType
health
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_HEALTH
Stała wartość przekazywana do funkcji startForeground()
FOREGROUND_SERVICE_TYPE_HEALTH
Wymagania wstępne środowiska wykonawczego

Musi być spełniony co najmniej 1 z tych warunków:

Opis

Wszystkie długotrwałe przypadki użycia, które obsługują aplikacje z kategorii fitness, np. monitory aktywności.

Lokalizacja

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w sekcji
android:foregroundServiceType
location
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_LOCATION
stała wartość przekazywana do startForeground(),
FOREGROUND_SERVICE_TYPE_LOCATION
Wymagania wstępne środowiska wykonawczego

Użytkownik musi mieć włączone usługi lokalizacyjne, a aplikacja musi mieć co najmniej 1 z tych uprawnień w czasie działania:

.
Opis

Długotrwałe przypadki użycia, które wymagają dostępu do lokalizacji, takie jak nawigacja i udostępnianie lokalizacji.

Alternatywy

Jeśli aplikacja ma być uruchamiany, gdy użytkownik dotrze do określonych lokalizacji, rozważ użycie interfejsu Geofence API.

Multimedia

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w sekcji
android:foregroundServiceType
mediaPlayback
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_MEDIA_PLAYBACK
Stała do przekazania do startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
Wymagania wstępne dotyczące środowiska wykonawczego
Brak
Opis

Dotyczy to ciągłego odtwarzania dźwięku lub wideo w tle. obsługiwać funkcję cyfrowego nagrywania wideo (DVR) na Androidzie TV;

Alternatywy

Jeśli wyświetlasz film w trybie obrazu w obrazie, użyj opcji Tryb obrazu w obrazie.

Przetwarzane materiały

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w domenie
android:foregroundServiceType
mediaProcessing
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_MEDIA_PROCESSING
Stała do przekazywania do: startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING
Wymagania wstępne środowiska wykonawczego
Brak
Opis

Usługa do wykonywania czasochłonnych operacji na zasobach medialnych, takich jak konwersja multimediów na różne formaty. System zezwala na uruchomienie tej usługi przez ograniczony czas. W normalnych okolicznościach ten limit czasu wynosi 6 godzin z każdej 24 godzin. Ten limit jest wspólny dla wszystkich działających na pierwszym planie usług mediaProcessing.

Aplikacja powinna ręcznie zatrzymać usługę przetwarzania multimediów w tym scenariuszu:

Po upływie tego czasu system wywołuje metodę Service.onTimeout(int, int) usługi. W tej chwili usługa ma kilka sekund na wywołanie Service.stopSelf(). Jeśli usługa nie wywoła Service.stopSelf(), wystąpi błąd ANR z tym komunikatem o błędzie: „Usługa na pierwszym planie <fgs_type> nie została zatrzymana w ramach swojego limitu czasu: <component_name>”.

Uwaga: usługa Service.onTimeout(int, int) jest niedostępna na urządzeniach z Androidem 14 lub starszym. Gdy usługa przetwarzania multimediów osiągnie limit czasu na urządzeniach z tymi wersjami, system natychmiast zapisze aplikację w pamięci podręcznej. Z tego powodu aplikacja nie powinna czekać na powiadomienie o przekroczeniu limitu czasu. Zamiast tego jak najszybciej powinien zakończyć działanie usługi na pierwszym planie lub zmienić ją w usługę działającą w tle.

Wyświetlanie multimediów

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w sekcji
android:foregroundServiceType
mediaProjection
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_MEDIA_PROJECTION
Stała do przekazania do startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
Wymagania wstępne dotyczące środowiska wykonawczego

Przed uruchomieniem usługi na pierwszym planie wywołaj metodę createScreenCaptureIntent(). W ten sposób wyświetlisz użytkownikowi powiadomienie o uprawnieniach. Zanim utworzysz usługę, użytkownik musi przyznać uprawnienia.

Po utworzeniu usługi na pierwszym planie możesz wywołać MediaProjectionManager.getMediaProjection().

Opis

Dotyczy to wyświetlania treści na wyświetlaczu innym niż główny lub urządzeniu zewnętrznym przy użyciu interfejsów MediaProjection API. Nie muszą to być wyłącznie treści multimedialne.

Alternatywy

Aby przesyłać strumieniowo multimedia na inne urządzenie, użyj pakietu Google Cast SDK.

Mikrofon

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w sekcji
android:foregroundServiceType
microphone
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_MICROPHONE
Stała do przekazania do startForeground()
FOREGROUND_SERVICE_TYPE_MICROPHONE
Wymagania wstępne dotyczące środowiska wykonawczego

Poproś o uprawnienie czasu działania RECORD_AUDIO i uzyskaj je.

Opis

Dotyczy to ciągłego nagrywania dźwięku w tle, np. w przypadku dyktafonów lub aplikacji do komunikacji.

Rozmowa telefoniczna

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w sekcji
android:foregroundServiceType
phoneCall
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_PHONE_CALL
Stała do przekazania do startForeground()
FOREGROUND_SERVICE_TYPE_PHONE_CALL
Wymagania wstępne dotyczące środowiska wykonawczego

Musi być spełniony co najmniej jeden z tych warunków:

  • Aplikacja jest domyślną aplikacją telefoniczną w ramach roli ROLE_DIALER.
Opis

Kontynuuj trwające połączenie za pomocą interfejsów ConnectionService API.

Alternatywy

Jeśli chcesz wykonywać połączenia telefoniczne, wideo lub VoIP, użyj biblioteki android.telecom.

Rozważ użycie CallScreeningService do filtrowania połączeń.

Zdalne przesyłanie wiadomości

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w domenie
android:foregroundServiceType
remoteMessaging
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_REMOTE_MESSAGING
Stała do przekazywania do: startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
Wymagania wstępne środowiska wykonawczego
Brak
Opis
Przenoszenie SMS-ów z jednego urządzenia na drugie. Zapewnia ciągłość zadań związanych z wiadomościami przy przełączaniu się na inne urządzenie.

Krótka obsługa

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w domenie
android:foregroundServiceType
shortService
Uprawnienia do zadeklarowania w pliku manifestu
Brak
Stała do przekazywania do: startForeground()
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
Wymagania wstępne środowiska wykonawczego
Brak
Opis

Szybko kończ najważniejsze zadania, których nie można przerwać ani odłożyć na później.

Ten typ ma kilka wyjątkowych cech:

  • Może być aktywna tylko przez krótki czas (około 3 minuty).
  • Brak obsługi usług przyklejonych na pierwszym planie.
  • Nie można uruchomić innych usług działających na pierwszym planie.
  • Nie wymaga uprawnień dotyczących konkretnego typu, ale nadal wymaga uprawnienia FOREGROUND_SERVICE.
  • Usługa shortService może się zmienić na inny typ usługi tylko wtedy, gdy aplikacja kwalifikuje się obecnie do uruchomienia nowej usługi na pierwszym planie.
  • Usługa na pierwszym planie może w każdej chwili zmienić swój typ na shortService. W tym momencie rozpoczyna się limit czasu oczekiwania.

Limit czasu usługi shortService zaczyna się od momentu wywołania metody Service.startForeground(). Aplikacja powinna wywołać Service.stopSelf() lub Service.stopForeground() przed upływem limitu czasu. W przeciwnym razie wywoływany jest nowy Service.onTimeout(), co daje aplikacjom krótką okazję do wywołania metody stopSelf() lub stopForeground() w celu zatrzymania działania usługi.

W krótkim czasie po wywołaniu funkcji Service.onTimeout() aplikacja przechodzi w stan z pamięci podręcznej i nie jest już uznawana za działającą na pierwszym planie, chyba że użytkownik aktywnie z niej korzysta. W krótkim czasie po zapisaniu aplikacji w pamięci podręcznej, a aplikacja nie została zatrzymana, aplikacja otrzymuje błąd ANR. Wiadomość o błędzie ANR zawiera informację o elemencie FOREGROUND_SERVICE_TYPE_SHORT_SERVICE. Dlatego wdrożenie wywołania zwrotnego Service.onTimeout() uznaje się za sprawdzoną metodą.

Wywołanie zwrotne Service.onTimeout() nie występuje na Androidzie 13 i starszych wersjach. Jeśli na takich urządzeniach ta sama usługa działa, nie dochodzi do jej przekroczenia limitu czasu ani błędów ANR. Upewnij się, że usługa zatrzymuje się natychmiast po zakończeniu zadania przetwarzania, nawet jeśli nie odebrała jeszcze wywołania zwrotnego Service.onTimeout().

Pamiętaj, że jeśli limit czasu shortService nie jest przestrzegany, w aplikacji wystąpi błąd ANR, nawet jeśli mają uruchomione inne prawidłowe usługi na pierwszym planie lub inne uruchomione procesy cyklu życia aplikacji.

Jeśli aplikacja jest widoczna dla użytkownika lub spełnia jedno z wyjątków, które zezwalają na uruchamianie usług działających na pierwszym planie w tle, ponowne wywołanie metody Service.StartForeground() z parametrem FOREGROUND_SERVICE_TYPE_SHORT_SERVICE wydłuża czas oczekiwania o kolejne 3 minuty. Jeśli aplikacja nie jest widoczna dla użytkownika i nie spełnia jednego z wyjątków, każda próba uruchomienia kolejnej usługi na pierwszym planie (niezależnie od typu) powoduje wywołanie ForegroundServiceStartNotAllowedException.

Jeśli użytkownik wyłączy optymalizację baterii w Twojej aplikacji, nadal na niego wpływa limit czasu usługi shortService FGS.

Jeśli uruchomisz usługę działającej na pierwszym planie, która zawiera typ shortService i inny typ tej usługi, system zignoruje deklarację typu shortService. Usługa musi jednak spełniać wymagania wstępne innych zadeklarowanych typów. Więcej informacji znajdziesz w dokumentacji usług działających na pierwszym planie.

Specjalne zastosowanie

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w
android:foregroundServiceType
specialUse
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_SPECIAL_USE
Stała przekazu do startForeground()
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
Wymagania wstępne środowiska wykonawczego
Brak
Opis

Obejmuje wszystkie prawidłowe przypadki użycia usług działających na pierwszym planie, których nie obejmują inne typów usług na pierwszym planie.

Oprócz zadeklarowania FOREGROUND_SERVICE_TYPE_SPECIAL_USE typu usługi na pierwszym planie, deweloperzy powinni zadeklarować przypadki użycia w sekcji pliku manifestu. Aby to zrobić, określają element <property> w parametrze Element <service>. Te wartości i odpowiadające im przypadki użycia to sprawdzone podczas przesyłania aplikacji w Konsoli Google Play. Zastosowanie podane przez Ciebie przypadki są swobodne. Pamiętaj, aby podać odpowiednio dużo pozwalające weryfikatorowi sprawdzić, dlaczego warto użyć karty specialUse typu.

<service android:name="fooService" android:foregroundServiceType="specialUse">
  <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
      android:value="explanation_for_special_use"/>
</service>

Wyjątek systemowy

Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w domenie
android:foregroundServiceType
systemExempted
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
Stała do przekazywania do: startForeground()
FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
Wymagania wstępne środowiska wykonawczego
Brak
Opis

Zarezerwowany na potrzeby aplikacji systemowych i określonych integracji systemowych, aby mogły nadal korzystać z usług działających na pierwszym planie.

Aby użyć tego typu, aplikacja musi spełniać co najmniej jedno z tych kryteriów:

Egzekwowanie zasad Google Play dotyczących używania typów usług działających na pierwszym planie

Jeśli Twoja aplikacja jest kierowana na Androida 14 lub nowszego, musisz zadeklarować typy usług na pierwszym planie w Konsoli Play na stronie „Zawartość aplikacji” (Zasady > Zawartość aplikacji). Więcej informacji o deklarowaniu typów usług na pierwszym planie w Konsoli Play znajdziesz w artykule Omówienie wymagań dotyczących usług działających na pierwszym planie i intencji pełnoekranowych.