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

Począwszy od Androida 14 (interfejs API 34) musisz zadeklarować odpowiedni typ usługi dla każdej usługi na pierwszym planie. Oznacza to, że musisz zadeklarować typ usługi w manifeście aplikacji oraz żądanie odpowiedniego pierwszego planu dla danego typu usługi (oprócz żądania FOREGROUND_SERVICE uprawnienia). Ponadto w zależności od typu usługi na pierwszym planie muszą prosić o uprawnienia w czasie działania przed uruchomieniem usługi.

.

Aparat

Foreground service type to declare in manifest under android:foregroundServiceType
camera
Permission to declare in your manifest
FOREGROUND_SERVICE_CAMERA
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_CAMERA
Runtime prerequisites

Request and be granted the CAMERA runtime permission

Description

Continue to access the camera from the background, such as video chat apps that allow for multitasking.

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

Foreground service type to declare in manifest under
android:foregroundServiceType
dataSync
Permission to declare in your manifest
FOREGROUND_SERVICE_DATA_SYNC
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
Runtime prerequisites
None
Description

Data transfer operations, such as the following:

  • Data upload or download
  • Backup-and-restore operations
  • Import or export operations
  • Fetch data
  • Local file processing
  • Transfer data between a device and the cloud over a network
Alternatives

See Alternatives to data sync foreground services for detailed information.

Stan

Foreground service type to declare in manifest under
android:foregroundServiceType
health
Permission to declare in your manifest
FOREGROUND_SERVICE_HEALTH
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_HEALTH
Runtime prerequisites

At least one of the following conditions must be true:

Description

Any long-running use cases to support apps in the fitness category such as exercise trackers.

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

Foreground service type to declare in manifest under
android:foregroundServiceType
mediaPlayback
Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
Runtime prerequisites
None
Description

Continue audio or video playback from the background. Support Digital Video Recording (DVR) functionality on Android TV.

Alternatives

If you're showing picture-in-picture video, use Picture-in-Picture mode.

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 przekazu do startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
Wymagania wstępne środowiska wykonawczego

Wywołaj metodę createScreenCaptureIntent() przed rozpoczęciem usługę działającą na pierwszym planie. Spowoduje to wyświetlenie użytkownikowi powiadomienia o uprawnieniach. użytkownik musi przyznać odpowiednie uprawnienia, zanim będzie można utworzyć usługę.

Po utworzeniu usługi na pierwszym planie możesz wywołać funkcję 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. Te treści nie muszą być wyłącznie multimediami treści.

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
android:foregroundServiceType
microphone
Uprawnienia do zadeklarowania w pliku manifestu
FOREGROUND_SERVICE_MICROPHONE
Stała przekazu 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

nadal przechwytywać mikrofony w tle, na przykład z dyktafonów lub do komunikacji.

Rozmowa telefoniczna

Foreground service type to declare in manifest under
android:foregroundServiceType
phoneCall
Permission to declare in your manifest
FOREGROUND_SERVICE_PHONE_CALL
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_PHONE_CALL
Runtime prerequisites

At least one of these conditions must be true:

  • App is the default dialer app through the ROLE_DIALER role.
Description

Continue an ongoing call using the ConnectionService APIs.

Alternatives

If you need to make phone, video, or VoIP calls, consider using the android.telecom library.

Consider using CallScreeningService to screen calls.

Zdalne przesyłanie wiadomości

Foreground service type to declare in manifest under
android:foregroundServiceType
remoteMessaging
Permission to declare in your manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
Runtime prerequisites
None
Description
Transfer text messages from one device to another. Assists with continuity of a user's messaging tasks when they switch devices.

Krótkie usługi

Foreground service type to declare in manifest under
android:foregroundServiceType
shortService
Permission to declare in your manifest
None
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
Runtime prerequisites
None
Description

Quickly finish critical work that cannot be interrupted or postponed.

This type has some unique characteristics:

  • Can only run for a short period of time (about 3 minutes).
  • No support for sticky foreground services.
  • Cannot start other foreground services.
  • Doesn't require a type-specific permission, though it still requires the FOREGROUND_SERVICE permission.
  • A shortService can only change to another service type if the app is currently eligible to start a new foreground service.
  • A foreground service can change its type to shortService at any time, at which point the timeout period begins.

The timeout for shortService begins from the moment that Service.startForeground() is called. The app is expected to call Service.stopSelf() or Service.stopForeground() before the timeout occurs. Otherwise, the new Service.onTimeout() is called, giving apps a brief opportunity to call stopSelf() or stopForeground() to stop their service.

A short time after Service.onTimeout() is called, the app enters a cached state and is no longer considered to be in the foreground, unless the user is actively interacting with the app. A short time after the app is cached and the service has not stopped, the app receives an ANR. The ANR message mentions FOREGROUND_SERVICE_TYPE_SHORT_SERVICE. For these reasons, it's considered best practice to implement the Service.onTimeout() callback.

The Service.onTimeout() callback doesn't exist on Android 13 and lower. If the same service runs on such devices, it doesn't receive a timeout, nor does it ANR. Make sure that your service stops as soon as it finishes the processing task, even if it hasn't received the Service.onTimeout() callback yet.

It's important to note that if the timeout of the shortService is not respected, the app will ANR even if it has other valid foreground services or other app lifecycle processes running.

If an app is visible to the user or satisfies one of the exemptions that allow foreground services to be started from the background, calling Service.StartForeground() again with the FOREGROUND_SERVICE_TYPE_SHORT_SERVICE parameter extends the timeout by another 3 minutes. If the app isn't visible to the user and doesn't satisfy one of the exemptions, any attempt to start another foreground service, regardless of type, causes a ForegroundServiceStartNotAllowedException.

If a user disables battery optimization for your app, it's still affected by the timeout of shortService FGS.

If you start a foreground service that includes the shortService type and another foreground service type, the system ignores the shortService type declaration. However, the service must still adhere to the prerequisites of the other declared types. For more information, see the Foreground services documentation.

Specjalne zastosowanie

Foreground service type to declare in manifest under
android:foregroundServiceType
specialUse
Permission to declare in your manifest
FOREGROUND_SERVICE_SPECIAL_USE
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
Runtime prerequisites
None
Description

Covers any valid foreground service use cases that aren't covered by the other foreground service types.

In addition to declaring the FOREGROUND_SERVICE_TYPE_SPECIAL_USE foreground service type, developers should declare use cases in the manifest. To do so, they specify the <property> element within the <service> element. These values and corresponding use cases are reviewed when you submit your app in the Google Play Console. The use cases you provide are free-form, and you should make sure to provide enough information to let the reviewer see why you need to use the specialUse type.

<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:

Egzekwowanie zasad Google Play dotyczących korzystania z typów usług na pierwszym planie

If your app targets Android 14 or higher, you'll need to declare your app's foreground service types in the Play Console's app content page (Policy > App content). For more information on how to declare your foreground service types in Play Console, see Understanding foreground service and full-screen intent requirements.