ACCESS_BACKGROUND_LOCATION on Google Play

Checked against Google's policy pages on .

  • android.permission.ACCESS_BACKGROUND_LOCATION

What does it allow?

ACCESS_BACKGROUND_LOCATION lets an app read the device's location when it is not in use: closed, or in the background. Location while the app is on screen needs only ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION.

Which apps does Google Play allow to use it?

Google's guidance is that an app "should only request access to the location in the background if it's required for the core functionality of the app", and that it should give the user a significant benefit: physical safety, health and fitness tracking, navigation, delivery tracking or alerts are the kinds of feature that fit.

Location in the background only for advertising, analytics or personalisation is the kind of use Google says generally does not justify it, and so is any feature that could work with foreground access.

Why is it in my app?

Location, geofencing and analytics libraries can declare background location in their manifests. If no feature of yours works with the app closed, the permission is probably not yours.

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?

Ask for location only while the app is in use. If a feature has to keep going when the user switches away (a run being recorded, a delivery being tracked), a foreground service with the location type, which shows the user a notification, is the route Android provides, and it has its own declaration.

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.ACCESS_BACKGROUND_LOCATION" tools:node="remove" />
</manifest>

In Expo, block it in your app config instead:

{
  "expo": {
    "android": {
      "blockedPermissions": [
        "android.permission.ACCESS_BACKGROUND_LOCATION"
      ]
    }
  }
}

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?

Keeping it means four things, per Google: a Permissions Declaration Form describing one location-based feature; a short video (Google suggests 30 seconds or less) showing that feature and your disclosure; a prominent in-app disclosure before the permission prompt; and a privacy policy linked in the app and on the store listing.

The disclosure has to appear during normal use, not in a settings menu, use the word "location", say it is used when the app is closed or not in use, and list the features that use it. Google's suggested wording is: "This app collects location data to enable [feature] even when the app is closed or not in use."

Common questions

Do I need background location for geofencing?
Geofences that trigger while the app is closed do need it, and they are one of the uses Google describes as potentially approvable when they give the user a real benefit, such as safety alerts.
What should the declaration video show?
The feature that uses location in the background, including your prominent disclosure and the permission prompt, as a user would trigger them. Google suggests keeping it to about 30 seconds.
Can I remove background location if a library added it?
Yes, with tools:node="remove" or Expo's android.blockedPermissions. Foreground location keeps working.

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 ·