- 語法:
<service android:description="string resource" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:foregroundServiceType=["camera" | "connectedDevice" | "dataSync" | "location" | "mediaPlayback" | "mediaProjection" | "microphone" | "phoneCall"] android:icon="drawable resource" android:isolatedProcess=["true" | "false"] android:label="string resource" android:name="string" android:permission="string" android:process="string" > . . . </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()
如果未設定這項屬性,
<application>
元素的permission
屬性設定的權限會套用至該服務。如果未設定這兩個屬性,服務就不會受到權限保護。 android:process
- 執行服務的程序名稱。一般來說,應用程式的所有元件都是在為應用程式建立的預設程序中執行。這個程序的名稱與應用程式套件的名稱相同。
<application>
元素的process
屬性可以為所有元件設定不同的預設值。不過,元件可以透過各自的process
屬性覆寫預設值,讓您將應用程式分散至多個程序。如果指派給這項屬性的名稱開頭為半形冒號 (:),系統會在必要時建立新的應用程式專屬程序,並在該程序中執行服務。如果程序名稱的開頭是小寫英文字元,服務會在採用該名稱的通用程序中執行,前提是該程序要具備相關權限。這樣可讓不同應用程式中的元件共用程序,進而減少資源用量。
- 另請參閱:
<application>
<activity>
- 導入版本:
- API 級別 1
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2022-09-18 (世界標準時間)。
[]
[]