<dịch vụ>

cú pháp:
<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" >
    ...
</service>
có trong:
<application>
có thể chứa:
<intent-filter>
<meta-data>
nội dung mô tả:
Khai báo một dịch vụ, một lớp con Service, là một trong các thành phần của ứng dụng. Không giống như hoạt động (activity), dịch vụ (service) không có giao diện người dùng trực quan. Chúng được dùng để triển khai các thao tác lâu dài ở chế độ nền hoặc triển khai một API giao tiếp đa dạng thức có thể được gọi qua ứng dụng khác.

Tất cả các dịch vụ phải được biểu thị bằng phần tử <service> trong tệp kê khai. Mọi hoạt động chưa khai báo sẽ không được hệ thống phát hiện và chạy.

Lưu ý: Trên Android 8.0 (API cấp 26) trở lên, hệ thống sẽ giới hạn những việc ứng dụng có thể làm trong khi ứng dụng đang chạy ở chế độ nền. Để biết thêm thông tin, hãy xem hướng dẫn về giới hạn về hoạt động thực thi ở chế độ nềngiới hạn về thông tin vị trí ở chế độ nền.

thuộc tính:
android:description
Một chuỗi mà người dùng đọc được, dùng để mô tả dịch vụ. Nội dung mô tả được đặt ở dạng tham chiếu đến tài nguyên chuỗi để có thể được bản địa hoá như các chuỗi khác trong giao diện người dùng.
android:directBootAware

Liệu hoạt động có nhận biết khi khởi động trực tiếp hay không, tức là hoạt động có thể chạy trước khi người dùng mở khoá thiết bị không.

Lưu ý: Trong quá trình Khởi động trực tiếp, dịch vụ trong ứng dụng của bạn chỉ có thể truy cập dữ liệu được lưu trữ trong bộ nhớ được bảo vệ của thiết bị.

Giá trị mặc định là "false".

android:enabled
Liệu hệ thống có thể tạo thực thể cho dịch vụ này hay không. Thuộc tính này sẽ là "true" nếu hệ thống có thể và là "false" nếu hệ thống không thể. Giá trị mặc định là "true".

Phần tử <application> có thuộc tính enabled riêng áp dụng cho tất cả thành phần của ứng dụng, bao gồm cả dịch vụ. Các thuộc tính <application><service> đều phải là "true" vì cả hai đều được đặt theo mặc định để bật dịch vụ. Nếu giá trị là "false", thì dịch vụ sẽ bị tắt và không thể tạo thực thể.

android:exported
Liệu các thành phần của các ứng dụng khác có thể gọi dịch vụ hoặc tương tác với dịch vụ đó hay không. Giá trị là "true" nếu có thể và là "false" nếu không thể. Khi giá trị là "false", chỉ các thành phần của cùng một ứng dụng hoặc các ứng dụng có cùng mã nhận dạng người dùng mới có thể bắt đầu dịch vụ hoặc liên kết với dịch vụ đó.

Giá trị mặc định tuỳ thuộc vào việc dịch vụ có chứa bộ lọc ý định hay không. Nếu không có bộ lọc nào, thì bạn chỉ có thể gọi dịch vụ bằng cách chỉ định tên lớp chính xác của dịch vụ đó. Tức là dịch vụ chỉ dành cho mục đích sử dụng nội bộ trong ứng dụng, vì ứng dụng khác sẽ không biết tên lớp. Vì vậy, trong trường hợp này, giá trị mặc định là "false". Mặt khác, sự hiện diện của ít nhất một bộ lọc ngụ ý rằng dịch vụ dành cho mục đích sử dụng bên ngoài, vì vậy, giá trị mặc định là "true".

Thuộc tính này không phải là cách duy nhất để hạn chế mức độ hiển thị của một dịch vụ với các ứng dụng khác. Bạn cũng có thể sử dụng quyền để giới hạn các thực thể bên ngoài có thể tương tác với dịch vụ. Xem thuộc tính permission.

android:foregroundServiceType

Chỉ định rằng dịch vụ là dịch vụ trên nền trước đáp ứng một trường hợp sử dụng cụ thể. Ví dụ: loại dịch vụ trên nền trước của "location" cho biết ứng dụng đang truy cập thông tin vị trí hiện tại của thiết bị, thường là để tiếp tục một hành động do người dùng bắt đầu liên quan đến thông tin vị trí của thiết bị.

Bạn có thể chỉ định nhiều loại dịch vụ trên nền trước cho một dịch vụ cụ thể.

android:icon
Biểu tượng đại diện cho dịch vụ. Thuộc tính này được đặt ở dạng tham chiếu đến một tài nguyên có thể vẽ và chứa định nghĩa hình ảnh. Nếu bạn không đặt thuộc tính này, thì hệ thống sẽ sử dụng biểu tượng được chỉ định cho toàn bộ ứng dụng. Hãy xem thuộc tính icon của phần tử <application>.

Biểu tượng của dịch vụ, bất kể được đặt ở đây hay do phần tử <application> đặt, cũng là biểu tượng mặc định cho tất cả bộ lọc ý định của dịch vụ. Hãy xem thuộc tính icon của phần tử <intent-filter>.

android:isolatedProcess
Nếu bạn đặt thành "true", thì dịch vụ này sẽ chạy theo một quy trình đặc biệt, tách biệt với phần còn lại của hệ thống và không có quyền riêng nào. Cách liên lạc duy nhất với dịch vụ này là thông qua Service API (API Dịch vụ) có chức năng liên kết và bắt đầu.
android:label
Tên dịch vụ dễ đọc đối với người dùng. Nếu bạn không đặt thuộc tính này, thì nhãn được đặt cho toàn bộ ứng dụng sẽ được dùng. Hãy xem thuộc tính label của phần tử <application>.

Nhãn của dịch vụ, bất kể được đặt ở đây hay do phần tử <application> đặt, cũng là nhãn mặc định cho tất cả bộ lọc ý định của dịch vụ. Hãy xem thuộc tính label của phần tử <intent-filter>.

Nhãn được đặt ở dạng tham chiếu đến tài nguyên chuỗi để có thể được bản địa hoá như các chuỗi khác trong giao diện người dùng. Tuy nhiên, để thuận tiện trong quá trình phát triển ứng dụng, bạn cũng có thể đặt nhãn này làm chuỗi thô.

android:name
Tên của lớp con Service triển khai dịch vụ. Đây là tên lớp đủ điều kiện, chẳng hạn như "com.example.project.RoomService". Tuy nhiên, ở dạng viết tắt, nếu ký tự đầu tiên của tên là một dấu chấm, chẳng hạn như ".RoomService", thì hệ thống sẽ nối thêm tên gói được chỉ định trong phần tử <manifest>.

Một khi bạn đã phát hành ứng dụng thì đừng thay đổi tên này, trừ trường hợp bạn đặt android:exported="false".

Không có giá trị mặc định. Bạn phải chỉ định tên.

android:permission
Tên của một quyền mà một thực thể cần có để chạy được dịch vụ hoặc liên kết với dịch vụ đó. Nếu phương thức gọi của startService(), bindService() hoặc stopService() không được cấp quyền này, thì phương thức này sẽ không hoạt động và Intent không được gửi đến dịch vụ.

Nếu bạn không đặt thuộc tính này, thì quyền do thuộc tính permission của phần tử <application> đặt sẽ áp dụng cho dịch vụ. Nếu bạn không đặt thuộc tính nào, thì dịch vụ sẽ không được bảo vệ bằng quyền.

Để biết thêm thông tin về các quyền, hãy xem phần Quyền trên trang tổng quan về tệp kê khai ứng dụng và bài viết Nguyên tắc bảo mật.

android:process
Tên của quy trình mà dịch vụ chạy. Thường thì tất cả thành phần của ứng dụng sẽ chạy trong quy trình mặc định được tạo cho ứng dụng. Quy trình này có cùng tên với gói ứng dụng. Thuộc tính process của phần tử <application> có thể đặt một giá trị mặc định khác cho tất cả thành phần. Tuy nhiên, một thành phần có thể ghi đè giá trị mặc định bằng thuộc tính process riêng, cho phép bạn trải rộng ứng dụng của mình trên nhiều quy trình.

Nếu tên gán cho thuộc tính này bắt đầu bằng dấu hai chấm (:), thì một quy trình mới (dành riêng cho ứng dụng) sẽ được tạo khi cần và dịch vụ sẽ chạy trong quy trình đó.

Nếu tên quy trình bắt đầu bằng một ký tự viết thường, thì dịch vụ sẽ chạy trong một quy trình chung của tên đó, miễn hoạt động có quyền làm vậy. Điều này cho phép các thành phần trong nhiều ứng dụng dùng chung một quy trình, qua đó giúp giảm mức sử dụng tài nguyên.

xem thêm:
<application>
<activity>
ra mắt từ:
API cấp 1