Key takeaways
- Google Play's policy deadlines table lists January 27, 2027 for all four changes: the Contacts Permissions policy, the location button, READ_CALL_LOG for phone verification, and geofencing as a foreground service use case. Google ties the contacts and location button rules to apps that target Android 17 (API level 37) or later; its call log and geofencing pages give no target API.
- One Google source says something different. The June 2026 Play newsletter says "Starting October 28, 2026" for the contacts and location changes. I could not reconcile the two with a primary source, so I plan around January 27, 2027 and treat October 28 as an earlier date to watch.
- Apps that target Android 17 (API level 37) or later may request READ_CONTACTS only if the Android Contact Picker is not sufficient for core functionality, and they must file a Play Console declaration.
- The Contact Picker exists only on Android 17 or later (API level 37+) and is not backported, so an app that still supports older Android versions needs a plan for them.
- In Flutter, the permissions usually enter your app through plugins. Check the merged manifest, and remove one you do not need with tools:node="remove" on a uses-permission line in your own AndroidManifest.xml.
Pricing an app? Try the free app cost calculator or get a range for your project in the instant quote.
Google Play's deadlines table lists January 27, 2027 for four sensitive-permission changes: a new Contacts Permissions policy, the location button as the recommended minimum for precise location, no more READ_CALL_LOG for phone-number verification, and geofencing removed as a foreground service use case. The contacts and location button rules are tied to apps that target Android 17 (API level 37) or later. Google's call log and geofencing pages say only "effective January 27, 2027" and give no target API. The June 2026 Play newsletter says "Starting October 28, 2026" for the contacts and location changes, and I could not reconcile the two dates.
I checked each one on October 19, 2026. Google can change a date, so open the linked page before you plan around it.
Disclosure: App369 is my studio. I build and fix Flutter and Firebase apps, and the last section mentions what I sell. Google doesn't pay me for anything on this page.
The dated table
| Change | Announced | Declaration | Compliance date | Source |
|---|---|---|---|---|
| Contacts Permissions policy | April 15, 2026 | Play Console prompts start September 2026 | January 27, 2027 | Deadlines table, Help Center |
| Location button (precise location) | April 15, 2026 | Precise-location declaration available November 2026 | January 27, 2027 | Deadlines table, Help Center |
| READ_CALL_LOG for phone verification | July 15, 2026 (per the table) | None listed | January 27, 2027 | Deadlines table, Help Center |
| Geofencing as a foreground service use case | April 15, 2026 | None listed | January 27, 2027 | Deadlines table, Help Center |
The contacts article says compliance is mandatory on January 27, 2027 for apps that target Android 17 or later (API level 37+). The location article says compliance is mandatory for "all apps" on that date, but it requires the location button for apps that target Android 17 or later, and expects enforcement for those apps in late January 2027. Both say a self extension of 30 days will be available in Play Console, and that apps in scope are subject to enforcement after that date. The call log and geofencing pages state the effective date only, with no target API, so I can't say whether a lower target API protects you there.
The date conflict
Two Google sources give two different dates, and I want to show both.
The policy deadlines table lists 2027-01-27 as the deadline for each of the four rows, with announcement dates of 2026-04-15 (and 2026-07-15 for READ_CALL_LOG). The Help Center articles repeat it: the contacts article says "January 27, 2027: Policy compliance is mandatory for all apps that target Android 17 or later (API level 37+)."
The June 2026 Play newsletter, under "Policy deadlines and reminders", says: "Starting October 28, 2026: Contacts permissions: Developers must use the Android Contact Picker for apps that do not require broad contact access." It says the same date for the location button. It does not mention READ_CALL_LOG or geofencing.
What I could verify for each reading:
- January 27, 2027 appears on the deadlines table and in four Help Center articles as the effective or mandatory date.
- October 28, 2026 appears on the newsletter page. It does not appear in the Help Center articles I read.
- The April 2026 Android Developers Blog post says "new pre-review checks in the Play Console will be available starting October 27". That is one day off from October 28, and the post does not say the two are the same thing. It also says the contacts declaration form "will be available before October."
My reading is that October 27 or 28 marks the start of Play Console checks and January 27, 2027 is the date compliance becomes mandatory. That is my inference. No page I found states it, so treat it as unconfirmed.
My advice: plan to be done before October 28, 2026 if you can, and use January 27, 2027 as the hard date. Open Play Console, check any prompt or pre-launch warning on your app, and follow what it says.
1. Contacts Permissions policy
What changes. The Help Center article says apps that target Android 17 or later "may only request the READ_CONTACTS permission if the Android Contact Picker is not sufficient for your app to provide core functionality." Contacts are treated as personal and sensitive data under the User Data policy.
Who must act. Any app that targets Android 17 (API level 37) or later and requests READ_CONTACTS. Google says private apps and enterprise device management apps are exempt. If your app asks for contacts to share or invite, the April 2026 Android Developers Blog says to switch to the picker and remove READ_CONTACTS.
The declaration. If you keep the permission, you complete a declaration in Play Console that shows your access needs and why the Contact Picker is insufficient. The article says a custom picker "does not qualify as a reason to retain Contacts access."
The catch. The article states that the Android Contact Picker "is not backported to previous versions and only exists for Android 17 or later (API level 37+)." It is invoked with the Intent.ACTION_PICK_CONTACTS intent. If your app supports older Android versions, you need to decide what those users get.
2. The location button
What changes. Google's preview article says it is "introducing the location button as the recommended minimum scope for precise location." For apps that target Android 17 or later, if precise location is needed only for one-time, user-initiated actions, you must implement the Android location button and declare it in the manifest with the onlyForLocationButton flag.
Who must act. Any app that requests ACCESS_FINE_LOCATION. The minimum-scope article says all apps requesting precise location must complete a declaration in Play Console and explain why the location button or coarse location is insufficient. Apps that need precise, persistent access must show it is essential to core functionality.
Dates. Announced April 15, 2026. The precise-location declaration becomes available in November 2026. Compliance is mandatory January 27, 2027.
My advice: list every place your app asks for precise location. For each, ask whether it is a one-time action the user starts, such as "find stores near me". Those are the ones the button is for.
3. READ_CALL_LOG and phone verification
What changes. The SMS and call log article says Google "will no longer permit account verification via phone call as a use case for the READ_CALL_LOG permission", effective January 27, 2027. The article already requires apps using these permission groups to be actively registered as the default SMS, Phone or Assistant handler.
Who must act. Apps that read the call log to confirm a user's phone number, for example by matching an incoming verification call.
What to use instead. The article recommends the Digital Credentials API to verify accounts without sensitive permissions, and mentions that the SMS Retriever API can do SMS-based verification automatically. If neither is an option, users can enter a verification code manually.
4. Geofencing as a foreground service
What changes. The foreground service preview article says: "We're removing geofencing as an approved foreground services use case." It adds that developers can instead use the Geofence API. Effective January 27, 2027.
Who must act. Apps that run a location-type foreground service just to monitor geofences. The article still lists background location updates for user-initiated location sharing and navigation, so a service that does those is a separate question.
What the Geofence API needs. Android's geofencing guide says your app must request ACCESS_FINE_LOCATION, and ACCESS_BACKGROUND_LOCATION if it targets Android 10 (API level 29) or higher. You create a GeofencingClient through LocationServices. Note that the geofencing guide's permissions are themselves sensitive and fall under Play's location rules above.
The Flutter angle
Flutter apps get these permissions from three places: your own AndroidManifest.xml, plugin manifests, and the Play policy checks on the final build. Here is what I could verify on pub.dev.
- permission_handler (13.0.2 when I read it) has
Permission.contactsand a rationale check,Permission.contacts.shouldShowRequestRationale, on Android. Its page also says that on Android 10 and later you request foreground location first, then callPermission.locationAlways.request(). The page does not mention Android 17, the Contact Picker or the location button. - flutter_contacts (2.6.0) tells you to add
READ_CONTACTSandWRITE_CONTACTSto your manifest. ItsFlutterContacts.native.showPicker()needs no contacts permission on either platform. The page says calling it withpropertieson Android requiresREAD_CONTACTS. The page does not mention Android 17, so I can't say whethershowPicker()uses the new system picker on API 37. - contacts_service (0.6.3) is listed as published 5 years ago. Its README says to add
READ_CONTACTSandWRITE_CONTACTSand that it does not handle permission requests itself. I did not see a discontinued note on the page. - geolocator (14.1.1) tells you to add
ACCESS_COARSE_LOCATION, andACCESS_FINE_LOCATIONonly if you need precise location. ForACCESS_BACKGROUND_LOCATIONit says apps targeting Android 10 and later need it for updates in the background. It states thatFOREGROUND_SERVICE_LOCATIONis required from Android 14 for a location foreground service and that the plugin's manifest declares it.
None of those pages describe the new Play policy, so whether a given plugin version is compliant is something you need to test, not assume.
Removing a permission from the merged manifest
Android's manifest documentation describes the tools:node="remove" marker as one that removes an element from the merged manifest, used "when you discover an element in your merged manifest that you don't need that was provided by a lower-priority manifest file that's out of your control (such as an imported library)." The page declares the namespace as xmlns:tools="http://schemas.android.com/tools" on the <manifest> element.
For a permission, the pattern in android/app/src/main/AndroidManifest.xml looks like this:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission
android:name="android.permission.READ_CALL_LOG"
tools:node="remove" />
The Android page's own example removes a meta-data element, not a uses-permission line. Applying it to a permission follows from the general rule, but I have not run it against your build. Build a release, then read the merged manifest and confirm the line is gone.
One more caution. Removing a permission a plugin needs will break that plugin feature at runtime. Remove only what you have confirmed your app does not use.
My advice: for each of the four permissions, search your own manifest and your merged manifest, then work out which plugin adds it before you change anything.
A short plan
- Check Play Console. Look for prompts about READ_CONTACTS and precise location on each app, and note the dates they show.
- Find the permissions. Read the merged manifest for
READ_CONTACTS,ACCESS_FINE_LOCATION,READ_CALL_LOGandFOREGROUND_SERVICE_LOCATION. - Trace each to a feature. Sharing or inviting: use the picker. One-time precise location: use the location button. Call-log verification: move to the Digital Credentials API or SMS Retriever. Geofence monitoring: move to the Geofence API.
- Decide your target API. The contacts and location rules apply to apps that target Android 17 or later. For the target API deadline itself, see my Android 16 target API guide.
- File declarations only for permissions you truly keep, and write down the user-facing feature each one supports.
- Test a release build on a real device, with a clean install, before you submit.
For every other dated Apple, Google Play and Firebase requirement in 2026 and 2027, see App Store and Google Play deadlines for 2026 and 2027.
Need a hand?
If your Flutter app requests contacts, precise location, call log or geofencing permissions and you want it sorted before Google Play enforces the change, the App Fix Ticket covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days and comes as a pull request. Or send me a short description.
Frequently asked questions
- When do the new Google Play contacts and location rules apply?
- Google's Policy Deadlines table lists January 27, 2027 for the Contacts Permissions policy and the location button. The contacts Help Center article says compliance is mandatory for apps that target Android 17 or later on that date, with a 30-day automatic self extension in Play Console. The location article applies the location button to apps that target Android 17 or later. The June 2026 newsletter separately says "Starting October 28, 2026", and I found no page that explains the gap.
- Do I have to stop using READ_CONTACTS?
- Not always. Google's policy says apps that target Android 17 or later may only request READ_CONTACTS if the Android Contact Picker is not sufficient to provide core functionality. If you keep it, you complete a declaration in Play Console that explains why the picker is not enough. A custom in-app contact picker does not count as a reason, according to the article.
- What replaces READ_CALL_LOG for phone number verification?
- Google's article says it will no longer permit account verification via phone call as a use case for READ_CALL_LOG, effective January 27, 2027. It points to the Digital Credentials API, and mentions the SMS Retriever API for SMS-based verification.
- Is geofencing banned in Android apps?
- No. Google is removing geofencing as an approved foreground services use case, effective January 27, 2027, and says developers can instead use the Geofence API. Android's geofencing guide describes the Geofence API through GeofencingClient.
- How do I remove a permission a Flutter plugin adds?
- Add xmlns:tools="http://schemas.android.com/tools" to the manifest element of android/app/src/main/AndroidManifest.xml, then add a uses-permission line for that permission with tools:node="remove". Android's manifest documentation describes the marker as removing an element from the merged manifest that a lower-priority manifest, such as a library, provided. Its own example removes a meta-data element, so test the permission case on a release build. Then check the merged manifest to confirm it is gone.
Sources
- Play Console Help, Policy Deadlines
- Android Developers, Play Monthly newsletter, June 2026
- Android Developers Blog, updated Play policies (April 2026)
- Play Console Help, Permissions and APIs that Access Sensitive Information
- Play Console Help, Preview: Permissions and APIs that Access Sensitive Information
- Play Console Help, Understanding Restricted Permissions with minimum scope alternatives
- Play Console Help, Minimum Scope: Foreground Location Access and the Location Button
- Play Console Help, Use of SMS or Call Log permission groups
- Play Console Help, Preview: foreground service and full-screen intent requirements
- Android Developers, Create and monitor geofences
- Android Developers, Merge multiple manifest files
- pub.dev, permission_handler
- pub.dev, flutter_contacts
- pub.dev, contacts_service
- pub.dev, geolocator
Related Resources
Related guides
App Store and Google Play Deadlines for 2026 and 2027
One dated table of the App Store, Google Play, Firebase and Google API requirements that affect mobile app owners in 2026 and 2027, with the primary source for each date, checked October 18, 2026.
Read moreGoogle Play Requires Target API 36: The Android 16 Update
Since August 31, 2026, Google Play requires new apps and updates to target Android 16 (API level 36), with an extension to November 1, 2026. What changes when you target API 36 (edge-to-edge, predictive back, large-screen orientation), which Flutter versions target it by default, and what to test, from Google's docs checked October 18, 2026.
Read moreAndroid Developer Verification: Dates and What to Do
Android developer verification means apps on certified Android devices must come from registered developers. The dates, the first four countries, what Play Console and non-Play developers do, and what it means for Flutter apps, from Google's pages checked October 18, 2026.
Read more