Począwszy od Androida 14 (poziom interfejsu API 34) dla każdej usługi na pierwszym planie musisz zadeklarować odpowiedni typ usługi. Oznacza to, że musisz zadeklarować typ usługi w pliku manifestu aplikacji i poprosić o odpowiednie uprawnienie usługi na pierwszym planie (oprócz uprawnienia FOREGROUND_SERVICE
). Ponadto w zależności od typu usługi na pierwszym planie przed jej uruchomieniem może być konieczne poproszenie o uprawnienia dotyczące czasu wykonywania.
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 przekazu do
startForeground()
FOREGROUND_SERVICE_TYPE_CAMERA
- Wymagania wstępne środowiska wykonawczego
Prośba o uprawnienia w czasie działania aplikacji
CAMERA
i ich przyznanie- Opis
Dalsze korzystanie w tle z aparatu, np. w przypadku aplikacji 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:
Zadeklaruj w pliku manifestu co najmniej jedno z tych uprawnień:
Poproś o przyznanie co najmniej jednego z tych uprawnień w czasie działania:
Zadzwoń pod numer
UsbManager.requestPermission()
- 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
android:foregroundServiceType
dataSync
- Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_DATA_SYNC
- Stała wartość przekazywana do
startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
- Wymagania wstępne środowiska wykonawczego
- Brak
- Opis
Operacje przenoszenia danych, takie jak:
- Przesyłanie lub pobieranie danych
- Operacje tworzenia i przywracania kopii zapasowej
- operacje importowania i eksportowania,
- Pobieranie danych
- Lokalne przetwarzanie plików
- Przenoszenie danych między urządzeniem a chmurą przez sieć
- Alternatywy
Więcej informacji znajdziesz w artykule Alternatywy dla usług na pierwszym planie synchronizujących dane.
Stan
- Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w
android:foregroundServiceType
health
- Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_HEALTH
- Stała wartość przekazywana do
startForeground()
FOREGROUND_SERVICE_TYPE_HEALTH
- Wymagania wstępne środowiska wykonawczego
Musi być spełniony co najmniej 1 z tych warunków:
Zadeklaruj uprawnienia
HIGH_SAMPLING_RATE_SENSORS
w pliku manifestu.Poproś o co najmniej 1 z tych uprawnień czasu działania i uzyskaj je:
- Opis
Długotrwałe przypadki użycia aplikacji z kategorii fitness, np. monitorów aktywności.
Lokalizacja
- Foreground service type to declare in manifest under
android:foregroundServiceType
location
- Permission to declare in your manifest
FOREGROUND_SERVICE_LOCATION
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_LOCATION
- Runtime prerequisites
The user must have enabled location services and the app must be granted at least one of the following runtime permissions:
- Description
Long-running use cases that require location access, such as navigation and location sharing.
- Alternatives
If your app needs to be triggered when the user reaches specific locations, consider using the geofence API instead.
Multimedia
- Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w
android:foregroundServiceType
mediaPlayback
- Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_MEDIA_PLAYBACK
- Stała przekazu do
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- Wymagania wstępne środowiska wykonawczego
- Brak
- Opis
Dotyczy to ciągłego odtwarzania dźwięku lub wideo w tle. Obsługa funkcji cyfrowego nagrywania wideo (DVR) na Androidzie TV.
- Alternatywy
Jeśli wyświetlasz film w trybie obrazu w obrazie, użyj trybu 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:
- Gdy operacja transkodowania zakończy się lub dojdzie do błędu, wywołaj usługę
Service.stopForeground()
iService.stopSelf()
, aby całkowicie zatrzymać usługę.
- Gdy operacja transkodowania zakończy się lub dojdzie do błędu, wywołaj usługę
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łanieService.stopSelf()
. Jeśli usługa nie wywołaService.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 wartość przekazywana do
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- Wymagania wstępne środowiska wykonawczego
Przed uruchomieniem usługi na pierwszym planie wywołaj metodę
createScreenCaptureIntent()
. W ten sposób wyświetli się powiadomienie o uprawnieniach. Użytkownik musi przyznać uprawnienia, zanim będzie można utworzyć usługę.Po utworzeniu usługi na pierwszym planie możesz wywołać metodę
MediaProjectionManager.getMediaProjection()
.- Opis
Wyświetlanie 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 SDK Google Cast.
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 wartość przekazywana do
startForeground()
FOREGROUND_SERVICE_TYPE_MICROPHONE
- Wymagania wstępne środowiska wykonawczego
Poproś o uprawnienia w czasie działania aplikacji
RECORD_AUDIO
i otrzymaj je. .
- Opis
Kontynuowanie rejestrowania dźwięku przez mikrofon w tle, np. w nagrywarkach głosowych lub aplikacjach do komunikacji.
Rozmowa telefoniczna
- Typ usługi na pierwszym planie do zadeklarowania w pliku manifestu w
android:foregroundServiceType
phoneCall
- Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_PHONE_CALL
- Stała wartość przekazywana do
startForeground()
FOREGROUND_SERVICE_TYPE_PHONE_CALL
- Wymagania wstępne środowiska wykonawczego
Musi być spełniony co najmniej 1 z tych warunków:
- Aplikacja zadeklarowała uprawnienia
MANAGE_OWN_CALLS
w pliku manifestu.
- Aplikacja zadeklarowała uprawnienia
- Aplikacja jest domyślną aplikacją do wybierania numerów w ramach roli
ROLE_DIALER
.
- Aplikacja jest domyślną aplikacją do wybierania numerów w ramach roli
- Opis
Kontynuuj trwającą rozmowę przy użyciu interfejsów API
ConnectionService
.- Alternatywy
Jeśli chcesz nawiązywać 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ótki film
- 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()
lubService.stopForeground()
przed upływem limitu czasu. W przeciwnym razie wywoływany jest nowyService.onTimeout()
, co daje aplikacjom krótką okazję do wywołania metodystopSelf()
lubstopForeground()
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 elemencieFOREGROUND_SERVICE_TYPE_SHORT_SERVICE
. Dlatego wdrożenie wywołania zwrotnegoService.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 zwrotnegoService.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 parametremFOREGROUND_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łanieForegroundServiceStartNotAllowedException
.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ę typushortService
. 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ć kartyspecialUse
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>
Wykluczone z systemu
- 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:
- Urządzenie działa w trybie demonstracyjnym
- Aplikacja jest właścicielem urządzenia
- Aplikacja jest właścicielem profilu
- Aplikacje zabezpieczające z rolą
ROLE_EMERGENCY
- aplikacje do zarządzania urządzeniem,
- Aplikacje z uprawnieniami
SCHEDULE_EXACT_ALARM
lubUSE_EXACT_ALARM
Aplikacje VPN (skonfigurowane w sekcji Ustawienia > Sieć i internet > VPN)
W przeciwnym razie zadeklarowanie tego typu spowoduje zgłoszenie błędu
ForegroundServiceTypeNotAllowedException
.
Egzekwowanie zasad Google Play w przypadku korzystania z typów usług na pierwszym planie
Jeśli Twoja aplikacja jest kierowana na Androida 14 lub nowszego, musisz zadeklarować typy jej usług na pierwszym planie na stronie treści aplikacji w Konsoli Play (Zasady > Zawartość aplikacji). Więcej informacji o deklarowaniu typów usług na pierwszym planie w Konsoli Play znajdziesz w tym artykule.