Aplikacje kierowane na Androida 12 (poziom API 31) lub nowszego nie mogą uruchamiać usług działających na pierwszym planie, gdy działają w tle, z kilkoma wyjątkami. Jeśli aplikacja spróbuje uruchomić usługę na pierwszym planie, gdy działa w tle, a usługa na pierwszym planie nie spełnia jednego z wyjątków, system zgłosi błąd ForegroundServiceStartNotAllowedException.
Jeśli aplikacja chce uruchomić usługę na pierwszym planie, która wymaga uprawnień podczas używania (np. uprawnień do czujnika ciała, aparatu, mikrofonu lub lokalizacji), nie może utworzyć tej usługi, gdy aplikacja działa w tle, nawet jeśli podlega jednemu z wyjątków od ograniczeń dotyczących uruchamiania w tle. Wyjaśnienie tego znajdziesz w sekcji Ograniczenia dotyczące uruchamiania usług na pierwszym planie, które wymagają uprawnień podczas korzystania z aplikacji.
Wyjątki od ograniczeń dotyczących uruchamiania w tle
W tych sytuacjach aplikacja może uruchamiać usługi na pierwszym planie, nawet gdy działa w tle:
- Aplikacja przechodzi ze stanu widocznego dla użytkownika, np. aktywności.
- Aplikacja może rozpocząć działanie w tle, z wyjątkiem sytuacji, w której aplikacja ma działanie w stosie wstecznym istniejącego zadania.
- Aplikacja otrzymuje wiadomość o wysokim priorytecie za pomocą Komunikacji w chmurze Firebase. 
- Użytkownik wykonuje działanie na elemencie interfejsu związanym z Twoją aplikacją. Może na przykład wejść w interakcję z dymkiem, powiadomieniem, widżetem lub aktywnością. 
- Aplikacja wywołuje alarm precyzyjny, aby wykonać działanie, o które prosi użytkownik. 
- Twoja aplikacja jest obecnie metodą wprowadzania na urządzeniu. 
- Aplikacja otrzymuje zdarzenie związane z geofencingiem lub przejściem rozpoznawania aktywności. 
- Po ponownym uruchomieniu urządzenia i otrzymaniu działania intencji - ACTION_BOOT_COMPLETED,- ACTION_LOCKED_BOOT_COMPLETEDlub- ACTION_MY_PACKAGE_REPLACEDw odbiorniku transmisji.
- Twoja aplikacja odbiera działanie intencji - ACTION_TIMEZONE_CHANGED,- ACTION_TIME_CHANGEDlub- ACTION_LOCALE_CHANGEDw odbiorniku transmisji.
- Aplikacja otrzyma zdarzenie - ACTION_TRANSACTION_DETECTEDz usługi- NfcService.
- Aplikacje z określonymi rolami systemowymi lub uprawnieniami, np. właściciele urządzeń i właściciele profili. 
- Aplikacja korzysta z Menedżera urządzeń towarzyszących i deklaruje uprawnienie - REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUNDlub uprawnienie- REQUEST_COMPANION_RUN_IN_BACKGROUND. W miarę możliwości używaj tagu- REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND.
- Użytkownik wyłącza optymalizację baterii w przypadku Twojej aplikacji. 
- Twoja aplikacja ma uprawnienie - SYSTEM_ALERT_WINDOW. Uwaga: jeśli Twoja aplikacja jest kierowana na Androida 15 lub nowszego, musi mieć- SYSTEM_ALERT_WINDOWuprawnienia i obecnie wyświetlać widoczne okno nakładki.
Ograniczenia dotyczące uruchamiania usług działających na pierwszym planie, które wymagają uprawnień podczas używania
W Androidzie 14 (API na poziomie 34) lub nowszym istnieją szczególne sytuacje, o których musisz pamiętać, jeśli uruchamiasz usługę działającą na pierwszym planie, która wymaga uprawnień podczas używania.
Jeśli Twoja aplikacja jest kierowana na Androida 14 lub nowszego, system operacyjny sprawdza podczas tworzenia usługi na pierwszym planie, czy aplikacja ma wszystkie odpowiednie uprawnienia dla danego typu usługi. Na przykład podczas tworzenia usługi na pierwszym planie typu mikrofon system operacyjny sprawdza, czy aplikacja ma obecnie uprawnienie RECORD_AUDIO. Jeśli nie masz tego uprawnienia, system zgłosi błąd SecurityException.
W przypadku uprawnień podczas używania może to stanowić problem. Jeśli aplikacja ma uprawnienie „podczas używania”, ma je tylko gdy działa na pierwszym planie. Oznacza to, że jeśli aplikacja działa w tle i próbuje utworzyć usługę na pierwszym planie typu kamera, lokalizacja lub mikrofon, system widzi, że aplikacja obecnie nie ma wymaganych uprawnień, i wyświetla błąd SecurityException.
Podobnie, jeśli aplikacja działa w tle i tworzy usługę związaną ze zdrowiem, która wymaga uprawnienia BODY_SENSORS, a aplikacja nie ma obecnie tego uprawnienia, system zgłosi wyjątek.
(Nie dotyczy to usług zdrowotnych, które wymagają innych uprawnień, np. ACTIVITY_RECOGNITION). DzwonieniePermissionChecker.checkSelfPermission()
nie zapobiega temu problemowi. Jeśli aplikacja ma uprawnienie do korzystania z lokalizacji podczas używania i wywołuje metodę checkSelfPermission(), aby sprawdzić, czy ma to uprawnienie, metoda zwraca wartość PERMISSION_GRANTED nawet wtedy, gdy aplikacja działa w tle. Gdy metoda zwraca wartość PERMISSION_GRANTED, oznacza to, że „Twoja aplikacja ma to uprawnienie podczas używania”.
Dlatego jeśli usługa na pierwszym planie wymaga uprawnienia „podczas używania”, musisz wywołać funkcję Context.startForegroundService() lub Context.bindService(), gdy aplikacja ma widoczną aktywność, chyba że usługa podlega jednemu z określonych zwolnień.
Wyjątki od ograniczeń dotyczących uprawnień podczas korzystania z aplikacji
W niektórych sytuacjach, nawet jeśli usługa na pierwszym planie jest uruchamiana, gdy aplikacja działa w tle, może ona nadal uzyskiwać dostęp do informacji o lokalizacji, aparacie i mikrofonie, gdy aplikacja działa na pierwszym planie („podczas używania”).
W tych samych sytuacjach, jeśli usługa deklaruje typ usługi na pierwszym planie location i jest uruchamiana przez aplikację, która ma uprawnienie ACCESS_BACKGROUND_LOCATION, może ona uzyskiwać dostęp do informacji o lokalizacji przez cały czas, nawet gdy aplikacja działa w tle.
Poniżej znajdziesz listę takich sytuacji:
- Usługa jest uruchamiana przez komponent systemu.
- Usługa rozpoczyna się od interakcji z widgetami aplikacji.
- Usługa rozpoczyna się od interakcji z powiadomieniem.
- Usługa rozpoczyna się jako PendingIntentwysyłany z innej, widocznej aplikacji.
- Usługa jest uruchamiana przez aplikację, która jest kontrolerem zasad dotyczących urządzeń działającym w trybie właściciela urządzenia.
- Usługa jest uruchamiana przez aplikację, która udostępnia VoiceInteractionService.
- Usługa jest uruchamiana przez aplikację, która ma START_ACTIVITIES_FROM_BACKGROUNDuprawnienia uprzywilejowane.
Określanie, których usług dotyczy problem w aplikacji
Podczas testowania aplikacji uruchom jej usługi działające na pierwszym planie. Jeśli uruchomiona usługa ma ograniczony dostęp do lokalizacji, mikrofonu i aparatu, w narzędziu Logcat pojawi się ten komunikat:
Foreground service started from background can not have \ location/camera/microphone access: service SERVICE_NAME
