從 Android 14 (API 級別 34) 開始,您必須為每項前景服務聲明適當的服務類型。也就是說,您必須在應用程式資訊清單中聲明服務類型,並為該類型要求適當的前景服務權限 (除了要求 FOREGROUND_SERVICE 權限外)。此外,視前景服務類型而定,您可能必須先要求執行階段權限,才能啟動服務。
相機
- 在
android:foregroundServiceType下的資訊清單中聲明的前景服務類型 camera- 在資訊清單中宣告的權限
FOREGROUND_SERVICE_CAMERA- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_CAMERA- 執行階段必要條件
要求並取得
CAMERA執行階段權限- 說明
繼續在背景存取相機,例如:支援多工處理的視訊通訊應用程式。
已連結的裝置
- 要在下列資訊清單中宣告的前景服務類型
android:foregroundServiceTypeconnectedDevice- 在資訊清單中宣告的權限
FOREGROUND_SERVICE_CONNECTED_DEVICE- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- 執行階段必要條件
至少必須符合下列其中一項條件:
在資訊清單中至少宣告下列其中一項權限:
至少要求下列其中一項執行階段權限,並獲得授予:
- 說明
與需要藍牙、NFC、IR、USB 或網路連線的外部裝置互動。
- 替代選項
如果您的應用程式需要持續將資料傳輸至外部裝置,建議改用隨附裝置管理工具。使用隨附裝置狀態 API,讓應用程式在隨附裝置在範圍內時持續執行。
如果應用程式需要掃描藍牙裝置,建議改用 Bluetooth 掃描 API。
同步處理資料
- 在以下位置的資訊清單中聲明前景服務類型
android:foregroundServiceTypedataSync- 在資訊清單中宣告的權限
FOREGROUND_SERVICE_DATA_SYNC- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_DATA_SYNC- 執行階段必要條件
- 無
- 說明
資料移轉作業,例如:
- 上傳或下載資料
- 備份與還原作業
- 匯入或匯出作業
- 擷取資料
- 本機檔案處理
- 透過網路在裝置和雲端之間轉移資料
。- 替代選項
詳情請參閱「資料同步前景服務的替代方案」。
健康度
- 要在資訊清單中宣告的前景服務類型
android:foregroundServiceTypehealth- 在資訊清單中宣告的權限
FOREGROUND_SERVICE_HEALTH- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_HEALTH- 執行階段必要條件
至少必須符合下列其中一項條件:
在資訊清單中宣告
HIGH_SAMPLING_RATE_SENSORS權限。至少要求下列其中一項執行階段權限,並獲得授予:
- 說明
在健身類別中,任何用於支援應用程式的長時間執行用途,例如:運動追蹤器。
位置
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypelocation- 在清单中声明的权限
FOREGROUND_SERVICE_LOCATION- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_LOCATION- 运行时前提条件
用户必须已启用位置信息服务,并且应用必须至少获得以下一项运行时权限:
- 说明
需要位置信息使用权的长时间运行的用例,例如导航和位置信息分享。
- 替代方案
如果您的应用需要在用户到达特定位置时触发,请考虑改用 Geofence API。
媒體
- 在以下位置的資訊清單中聲明前景服務類型
android:foregroundServiceTypemediaPlayback- 在資訊清單中宣告的權限
FOREGROUND_SERVICE_MEDIA_PLAYBACK- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- 執行階段必要條件
- 無
- 說明
在背景中繼續播放音訊或視訊。支援 Android TV 的數位錄影 (DVR) 功能。
。- 替代選項
處理中的媒體項目
- 要在下列資訊清單中宣告的前景服務類型
android:foregroundServiceTypemediaProcessing- 在資訊清單中宣告的權限
FOREGROUND_SERVICE_MEDIA_PROCESSING- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING- 執行階段必要條件
- 無
- 說明
這項服務可在媒體資產上執行耗時的作業,例如將媒體轉換為其他格式。系統會允許這項服務執行的時間有限,在一般情況下,這個時間限制是每 24 小時 6 小時。(這項限制適用於應用程式的所有
mediaProcessing前景服務)。在下列情況下,應用程式應手動停止媒體處理服務:
- 轉碼作業完成或達到失敗狀態時,請讓服務呼叫
Service.stopForeground()和Service.stopSelf(),以便完全停止服務。
- 轉碼作業完成或達到失敗狀態時,請讓服務呼叫
如果逾時,系統會呼叫服務的
Service.onTimeout(int, int)方法。此時,服務有幾秒的時間可以呼叫Service.stopSelf()。如果服務未呼叫Service.stopSelf(),系統會發生 ANR,並顯示以下錯誤訊息:「<fgs_type> 的前景服務未在逾時期限內停止:<component_name>」。注意:
Service.onTimeout(int, int)不適用於 Android 14 以下版本。在執行這些版本的裝置上,如果媒體處理服務達到逾時期限,系統會立即快取應用程式。因此,應用程式不應等待逾時通知。而是應盡快終止前景服務,或將其變更為背景服務。
媒體投影
- 在以下位置的資訊清單中聲明前景服務類型
android:foregroundServiceTypemediaProjection- 在資訊清單中宣告的權限
FOREGROUND_SERVICE_MEDIA_PROJECTION- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- 執行階段必要條件
請先呼叫
createScreenCaptureIntent()方法,再啟動前景服務。這麼做會向使用者顯示權限通知,使用者必須授予權限,您才能建立服務。建立前景服務後,即可呼叫
MediaProjectionManager.getMediaProjection()。- 說明
使用
MediaProjectionAPI 將內容投影到非主要螢幕或外部裝置。此類內容不侷限於媒體內容。 。- 替代選項
如要將媒體串流至其他裝置,請使用 Google Cast SDK。
麥克風
- 要在清单中声明的前台服务类型,位于
android:foregroundServiceTypemicrophone- 要在清单中声明的权限
FOREGROUND_SERVICE_MICROPHONE- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_MICROPHONE- 运行时前提条件
请求并被授予
RECORD_AUDIO运行时权限。- 说明
在后台继续捕获麦克风内容,例如录音器或通信应用。
語音通話
- 要在清单中声明的前台服务类型,位于
android:foregroundServiceTypephoneCall- 要在清单中声明的权限
FOREGROUND_SERVICE_PHONE_CALL- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_PHONE_CALL- 运行时前提条件
必须至少满足以下其中一个条件:
- 应用已在其清单文件中声明
MANAGE_OWN_CALLS权限。
- 应用已在其清单文件中声明
- 应用通过
ROLE_DIALER角色成为默认的拨号器应用。
- 应用通过
- 说明
使用
ConnectionServiceAPI 继续当前通话。- 替代方案
如果您需要拨打手机、视频或 VoIP 电话,不妨考虑使用
android.telecom库。考虑使用
CallScreeningService来过滤来电。
遠端通訊
- 要在下列資訊清單中宣告的前景服務類型
android:foregroundServiceTyperemoteMessaging- 在資訊清單中宣告的權限
FOREGROUND_SERVICE_REMOTE_MESSAGING- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- 執行階段必要條件
- 無
- 說明
- 在裝置之間轉移簡訊。協助使用者在切換裝置時,繼續編輯訊息。
短程服務
- 要在下列資訊清單中宣告的前景服務類型
android:foregroundServiceTypeshortService- 在資訊清單中宣告的權限
- 無
- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_SHORT_SERVICE- 執行階段必要條件
- 無
- 說明
迅速完成無法中斷或延遲的重大工作。
此類型具備若干獨特特性:
- 只能執行一小段時間 (約 3 分鐘)。
- 不支援固定式前景服務。
- 無法啟動其他前景服務。
- 雖然不需要特定類型的權限,但仍需有
FOREGROUND_SERVICE權限。 - 只有在應用程式目前符合啟動新前景服務的資格時,
shortService才能變更為其他服務類型。 - 前景服務可隨時將類型變更為
shortService,並在該時點開始逾時期限。
shortService 的逾時時間是從呼叫
Service.startForeground()的那一刻算起。應用程式預計會在逾時前呼叫Service.stopSelf()或Service.stopForeground()。否則,系統便會呼叫新的Service.onTimeout(),讓應用程式有空檔呼叫stopSelf()或stopForeground()以停止服務。呼叫
Service.onTimeout()後不久,應用程式就會進入快取狀態,除非使用者積極與應用程式互動,否則該應用程式將不再視為處於前景中。若應用程式進入快取狀態不久後卻尚未停止運作,則會收到 ANR。ANR 訊息提及了FOREGROUND_SERVICE_TYPE_SHORT_SERVICE。基於上述原因,實作Service.onTimeout()回呼是最佳做法。Service.onTimeout()回呼不存在於 Android 13 及更早版本中。如果在此類裝置上執行相同的服務,則不會收到逾時或收到 ANR。即使服務尚未收到Service.onTimeout()回呼,請確認您的服務在完成處理工作後立即停止。請注意,如果
shortService未遵守逾時條件,則即使應用程式具備其他有效的前景服務或其他執行中的應用程式生命週期程序,仍會發生 ANR。如果應用程式對使用者開放瀏覽權限,或符合任一允許從背景作業啟動前景服務的豁免條件,則使用
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE參數再次呼叫Service.StartForeground(),可再將逾時時間延長 3 分鐘。如果應用程式未對使用者開放瀏覽權限,且未符合任何一項豁免條件,則無論前景服務類型為何,只要嘗試啟動該前景服務,便會導致ForegroundServiceStartNotAllowedException。就算使用者停用應用程式的電池效能最佳化功能,也仍會受到 shortService FGS 逾時的影響。
如果您啟動的前景服務包含
shortService類型和其他前景服務類型,則系統將忽略shortService類型宣告。即便如此,服務仍必須遵守其他宣告類型的先決條件。詳情請參閱前景服務說明文件。
特殊用途
- 要在資訊清單中宣告的前景服務類型
android:foregroundServiceTypespecialUse- 在資訊清單中宣告的權限
FOREGROUND_SERVICE_SPECIAL_USE- 要傳遞至
startForeground()的常數 FOREGROUND_SERVICE_TYPE_SPECIAL_USE- 執行階段必要條件
- 無
- 說明
包含其他未涵蓋的有效前景服務用途 前景服務類型
除了宣告
FOREGROUND_SERVICE_TYPE_SPECIAL_USE之外, 前景服務類型,則開發人員應在 資訊清單。方法是指定<property><service>元素。這些值和對應的用途 在 Google Play 管理中心提交應用程式時進行審查使用 這類案例採用形式不拘,請務必提供充分的資訊 相關資訊,以便審查人員瞭解您必須使用specialUse的原因 類型。<service android:name="fooService" android:foregroundServiceType="specialUse"> <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="explanation_for_special_use"/> </service>
不受規範的系統
- Foreground service type to declare in manifest under
android:foregroundServiceTypesystemExempted- Permission to declare in your manifest
FOREGROUND_SERVICE_SYSTEM_EXEMPTED- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- Runtime prerequisites
- None
- Description
Reserved for system applications and specific system integrations, to continue to use foreground services.
To use this type, an app must meet at least one of the following criteria:
- Device is in demo mode state
- App is a Device Owner
- App is a Profiler Owner
- Safety Apps that have the
ROLE_EMERGENCYrole - Device Admin apps
- Apps holding
SCHEDULE_EXACT_ALARMorUSE_EXACT_ALARMpermission VPN apps (configured using Settings > Network & Internet > VPN)
Otherwise, declaring this type causes the system to throw a
ForegroundServiceTypeNotAllowedException.
Google Play 對於使用前景服務類型的政策違規處置
如果應用程式指定 Android 14 以上版本為目標,您就需要在 Play 管理中心的「應用程式內容」頁面 (依序點選「政策」>「應用程式內容」) 中,聲明所使用的任何前景服務類型。如要進一步瞭解如何在 Play 管理中心聲明前景服務類型,請參閱「瞭解前景服務和全螢幕意圖規定」。