Khai báo dịch vụ trên nền trước và yêu cầu cấp quyền
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Trong tệp kê khai của ứng dụng, hãy khai báo từng dịch vụ trên nền trước của ứng dụng bằng một phần tử <service>
. Đối với mỗi dịch vụ, hãy sử dụng thuộc tính android:foregroundServiceType
để khai báo loại công việc mà dịch vụ đó thực hiện.
Ngoài ra, hãy yêu cầu mọi quyền mà dịch vụ trên nền trước của bạn cần.
Khả năng tương thích giữa các phiên bản
Các yêu cầu về việc khai báo dịch vụ trên nền trước và yêu cầu quyền sẽ khác nhau tuỳ thuộc vào cấp độ API mà ứng dụng của bạn nhắm đến. Trang này mô tả các yêu cầu đối với những ứng dụng nhắm đến API cấp 34 trở lên. Để biết thông tin về những thay đổi đối với các dịch vụ trên nền trước trong các phiên bản nền tảng trước đó, hãy xem phần Những thay đổi đối với các dịch vụ trên nền trước.
Khai báo các dịch vụ trên nền trước trong tệp kê khai ứng dụng
Đoạn mã sau đây cho biết cách khai báo một dịch vụ phát nội dung nghe nhìn trên nền trước.
Bạn có thể dùng một dịch vụ như vậy để phát nhạc.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<application ...>
<service
android:name=".MyMediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="false">
</service>
</application>
</manifest>
Các điểm chính về mã
Trong ví dụ này, dịch vụ chỉ có một loại là media
. Nếu có nhiều loại áp dụng cho dịch vụ của bạn, hãy phân tách các loại đó bằng toán tử |
. Ví dụ: nếu dịch vụ của bạn sử dụng camera và micrô, hãy khai báo như sau:
android:foregroundServiceType="camera|microphone"
Tuỳ thuộc vào cấp độ API mà ứng dụng của bạn nhắm đến, bạn có thể bắt buộc phải khai báo dịch vụ trên nền trước trong tệp kê khai ứng dụng. Các yêu cầu đối với cấp độ API cụ thể được mô tả trong phần Các thay đổi đối với dịch vụ trên nền trước.
Nếu bạn cố gắng tạo một dịch vụ trên nền trước và loại dịch vụ đó không được khai báo trong tệp kê khai, thì hệ thống sẽ gửi ra một MissingForegroundServiceTypeException
khi gọi startForeground()
.
Ngay cả khi không bắt buộc, bạn vẫn nên khai báo tất cả các dịch vụ trên nền trước và cung cấp loại dịch vụ của chúng.
Yêu cầu quyền sử dụng dịch vụ trên nền trước
Đoạn mã sau đây cho biết cách yêu cầu cấp quyền cho một dịch vụ trên nền trước sử dụng camera.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA"/>
<application ...>
...
</application>
</manifest>
Các điểm chính về mã
- Mã này sử dụng các phương pháp hay nhất cho một ứng dụng nhắm đến API cấp 34 trở lên.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-08-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-08-27 UTC."],[],[],null,["In your app's manifest, declare each of your app's foreground services\nwith a [`\u003cservice\u003e`](/guide/topics/manifest/service-element)\nelement. For each service, use an\n[`android:foregroundServiceType` attribute](/develop/background-work/services/fgs/service-types)\nto declare what kind of work the service does.\n\nIn addition, request any permissions needed by your foreground services.\n| **Important:** All foreground service declarations must comply with the requirements in the [Google Play Device and Network Abuse policy](https://support.google.com/googleplay/android-developer/answer/9888379) and the Google Play [Understanding foreground service requirements\n| documentation](https://support.google.com/googleplay/android-developer/answer/13392821).\n\nVersion compatibility\n\nThe requirements for declaring your foreground services and requesting\npermissions vary depending on what API level your app targets. This page\ndescribes the requirements for apps that target API level 34 or higher. For\ninformation about changes to foreground services in earlier platform versions,\nsee [Changes to foreground services](/develop/background-work/services/fgs/changes).\n\nDeclare foreground services in the app manifest\n\nThe following code shows how to declare a media playback foreground service.\nYou might use a service like this to play music. \n\n \u003cmanifest xmlns:android=\"http://schemas.android.com/apk/res/android\" ...\u003e\n \u003capplication ...\u003e\n\n \u003cservice\n android:name=\".MyMediaPlaybackService\"\n android:foregroundServiceType=\"mediaPlayback\"\n android:exported=\"false\"\u003e\n \u003c/service\u003e\n \u003c/application\u003e\n \u003c/manifest\u003e\n\nKey points about the code\n\n- In this example, the service has only one type, `media`. If\n multiple types apply to your service, separate them with the `|`\n operator. For example, if your service uses the camera and microphone,\n declare it like this:\n\n android:foregroundServiceType=\"camera|microphone\"\n\n- Depending on what API level your app targets, you may be\n **required** to declare foreground services in the app\n manifest. The requirements for specific API levels are described in\n [Changes to foreground services](/develop/background-work/services/fgs/changes).\n\n If you try to create a foreground service and its type isn't declared\n in the manifest, the system throws a\n [`MissingForegroundServiceTypeException`](/reference/android/app/MissingForegroundServiceTypeException)\n upon calling `startForeground()`.\n\n Even when it isn't required, it's a best practice to declare\n all your foreground services and provide their service types.\n\nRequest the foreground service permissions\n\nThe following code shows how to request permissions for a foreground\nservice that uses the camera. \n\n \u003cmanifest xmlns:android=\"http://schemas.android.com/apk/res/android\" ...\u003e\n\n \u003cuses-permission android:name=\"android.permission.FOREGROUND_SERVICE\"/\u003e\n \u003cuses-permission android:name=\"android.permission.FOREGROUND_SERVICE_CAMERA\"/\u003e\n\n \u003capplication ...\u003e\n ...\n \u003c/application\u003e\n \u003c/manifest\u003e\n\nKey points about the code\n\n- This code uses best practices for an app that targets API level 34 or higher."]]