Foreground service types and the Play Console declaration
Checked against Google's policy pages on .
- android.permission.FOREGROUND_SERVICE_LOCATION
- android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK
- android.permission.FOREGROUND_SERVICE_DATA_SYNC
What does it allow?
A foreground service keeps work running while the user is not looking at your app, and shows a notification so they know. From Android 14, every foreground service must say what type it is (location, mediaPlayback, dataSync, camera and others) in the manifest, and request the matching permission, such as FOREGROUND_SERVICE_LOCATION for the location type.
Which apps does Google Play allow to use it?
Apps targeting Android 14 or higher must declare every foreground service type they use on the App content page in Play Console.
For each type, the declaration asks for a description of the feature that uses it, the impact on the user if the system defers or interrupts the task, a link to a video demonstrating the feature, and your use case from Google's list.
Why is it in my app?
Media players, location trackers, sync and download libraries declare their own foreground services and FOREGROUND_SERVICE_* permissions. Play Console can then ask you to declare and film a type your code never uses, which is a sign the library's service is in your merged manifest.
To see every permission in your build and which ones may need a declaration, paste your merged manifest into the Play Console permission declaration checker.
What can I use instead?
If a type belongs to a library feature you do not use, remove both the permission and the library's service from the merged manifest with tools:node="remove". For background work that can wait, WorkManager needs no foreground service at all.
How do I remove it?
Add it to your own manifest with tools:node="remove". The manifest merge then leaves it out, whichever library declared it. In Flutter and React Native the file is android/app/src/main/AndroidManifest.xml.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" tools:node="remove" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" tools:node="remove" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" tools:node="remove" />
</manifest>In Expo, block it in your app config instead:
{
"expo": {
"android": {
"blockedPermissions": [
"android.permission.FOREGROUND_SERVICE_LOCATION",
"android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK",
"android.permission.FOREGROUND_SERVICE_DATA_SYNC"
]
}
}
}Then test the feature the library provides: if it needed the permission, that feature may stop working.
How do I declare it if I keep it?
For each type you keep, have ready a short description of the feature, what happens to the user if Android pauses or delays it, and a video that shows the user triggering it. The declaration lives under Monitor and improve, App content.
Common questions
- Play Console asks me to declare a foreground service I don't use. Why?
- A library in your app declares one, and it was merged into your manifest. Find it in the Merged Manifest tab, then remove it or declare it.
- What should the foreground service video show?
- Google asks for a video demonstrating each foreground service feature: the steps a user takes in your app to trigger it, and the result.
Read next
The AD_ID permission and the Advertising ID declaration
The advertising ID. Usually added by an ads or analytics SDK; needs matching Play Console answers.
SMS and Call Log permissions on Google Play
SMS and call log access. For default SMS, phone and assistant apps, plus narrow exceptions.
QUERY_ALL_PACKAGES and the Play Console declaration
See every installed app. Limited to device search, antivirus, file managers and browsers.