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.

Sources

May we use analytics and ad measurement? Analytics (Vercel, and Ahrefs on our public pages) count page views without cookies. Ad measurement lets Google's tag on our public pages see which visits came from our Google ads, using a Google cookie. The site works the same either way. Cookie Policy · How Google uses data ·