<服務>

語法:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["camera" | "connectedDevice" |
                                        "dataSync" | "health" | "location" |
                                        "mediaPlayback" | "mediaProjection" |
                                        "microphone" | "phoneCall" |
                                        "remoteMessaging" | "shortService" |
                                        "specialUse" | "systemExempted"]
         android:icon="drawable resource"
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string"
         android:stopWithTask=["true" | "false"]>
    ...
</service>
包含於:
<application>
可包含:
<intent-filter>
<meta-data>
說明:
將服務 (Service 子類別) 宣告為應用程式的元件之一。與活動不同,服務缺少視覺使用者介面。可用來實作長時間執行的背景作業,或是可供其他應用程式呼叫的豐富通訊 API。

所有服務都必須以資訊清單檔案中的 <service> 元素呈現。系統不會偵測到未在此宣告的活動,因此也不會執行這類活動。

注意:在 Android 8.0 (API 級別 26) 以上版本中,系統會限制應用程式可在背景執行的工作。如需詳細資訊,請參閱探討背景執行限制背景位置限制的指南。

屬性:
android:description
使用者可理解的字串,用來描述服務。這個標籤應設為字串資源的參照,這樣才能像使用者介面中的其他字串一樣進行本地化。
android:directBootAware

指出服務是否具有「直接啟動感知特性」,即能否在使用者解鎖裝置前執行。

注意: 直接啟動期間,應用程式中的服務只能存取儲存在「受裝置保護」儲存空間中的資料。

預設值為 "false"

android:enabled
指出服務是否可由系統例項化。"true" 表示可以,"false" 表示不可以。預設值為 "true"

<application> 元素有專屬的 enabled 屬性,適用於包括服務在內的所有應用程式元件。<application><service> 屬性都必須是 "true" (此為兩者的預設設定),才能啟用服務。如果任一屬性為 "false",服務就會停用,並且無法例項化。

android:exported
指出其他應用程式的元件能否叫用服務或與其互動。"true" 表示可以,"false" 表示不可以。如果設為 "false",則只有同一個應用程式的元件,或具有相同使用者 ID 的應用程式的元件,才能啟動服務或繫結至該服務。

預設值取決於服務是否包含意圖篩選器。沒有任何篩選器時,代表只有在指定確切的類別名稱後,才能叫用服務。這表示服務僅供應用程式內部使用,因為其他應用程式不知道該類別名稱。因此在此情況下,預設值為 "false"。另一方面,若出現至少一個篩選器,表示服務會用於外部用途,因此預設值為 "true"

除了這項屬性外,還有其他方法可限制服務向其他應用程式公開。您也可以利用權限來限制能與服務互動的外部實體。詳情請參閱 permission 屬性。

android:foregroundServiceType

指出服務是為了滿足特定用途的前景服務。例如,前景服務類型 "location" 表示應用程式會取得裝置目前的位置,通常是為了繼續使用者起始的動作 (與裝置位置有關)。

您可以將多個前景服務類型指派至特定服務。

android:icon
用來代表服務的圖示。這項屬性會設為包含圖片定義的可繪製資源參照。如未設定,系統會改用針對應用程式整體指定的圖示。詳情請參閱 <application> 元素的 icon 屬性。

服務的圖示 (無論是在這裡設定,或由 <application> 元素設定) 也是所有服務的意圖篩選器的預設圖示。詳情請參閱 <intent-filter> 元素的 icon 屬性。

android:isolatedProcess
如果設為 "true",這項服務就會透過特殊程序執行,該程序獨立於系統的其他部分,且服務本身沒有權限。唯一的通訊方式是透過 Service API 進行繫結和啟動程序。
android:label
使用者可理解的服務名稱。如未設定這項屬性,系統會改用針對應用程式整體設定的標籤。詳情請參閱 <application> 元素的 label 屬性。

服務的標籤 (無論是在這裡設定,或由 <application> 元素設定) 也是所有服務的意圖篩選器的預設標籤。詳情請參閱 <intent-filter> 元素的 label 屬性。

這個標籤應設為字串資源的參照,這樣才能像使用者介面中的其他字串一樣進行本地化。不過為了方便起見,您也可以在開發應用程式時將其設為原始字串。

android:name
實作服務的 Service 子類別名稱。此為完整的類別名稱,例如 "com.example.project.RoomService"。不過為了精簡起見,如果名稱的第一個字元是半形句號,例如 ".RoomService",則會加到 <manifest> 元素中所指定套件名稱的後方。

發布應用程式後,除非您已設定 android:exported="false",否則請勿變更這個名稱

這項屬性沒有預設值。您必須指定名稱。

android:permission
實體啟動服務或繫結至服務所需的權限名稱。如果 startService()bindService()stopService() 的呼叫端未獲得這項權限,該方法會無法運作,且 Intent 物件不會傳送至服務。

如果未設定這個屬性,由 <application> 元素的 permission 屬性所設定的權限會套用至該服務。如果未設定這兩個屬性,服務就不會受到權限保護。

如要進一步瞭解權限,請參閱應用程式資訊清單總覽中的「權限」一節和「安全性指南」。

android:process
執行服務的程序名稱。一般來說,應用程式的所有元件都是在針對應用程式建立的預設程序中執行。這個程序的名稱與應用程式套件的名稱相同。<application> 元素的 process 屬性可以為所有元件設定不同的預設值。不過,元件可以使用本身的 process 屬性覆寫預設值,讓您將應用程式分散至多個程序。

如果指派給這項屬性的名稱以半形冒號 (:) 開頭,系統會在需要時建立一個專屬於該應用程式的新程序,而服務會在該程序中執行。

如果程序名稱的開頭是小寫英文字元,服務會在採用該名稱的通用程序中執行 (前提是該程序具備相關權限)。這樣可讓不同應用程式中的元件共用程序,進而減少資源用量。

android:stopWithTask
如果設為 "true",當使用者移除根植於應用程式擁有的活動的任務時,系統會自動停止服務。預設值為 "false"
另請參閱:
<application>
<activity>
導入版本:
API 級別 1