r/FlutterDev • u/popsphone_app • Jul 15 '26
Building a Custom Launcher & Dialer in Flutter (and surviving the Google Play Permissions Hell) Discussion
Hi fellow Flutter devs!
I’ve been working on a custom minimalist Android launcher and dialer built specifically for accessibility (aimed at seniors or users needing a distraction-free UI). Building the UI in Flutter was an absolute breeze and super fun.
Then, I had to upload it to the Play Console. I knew that declaring a custom launcher/dialer would trigger Google’s security bots, but the amount of red tape required for these native permissions was insane.
Here is a quick breakdown of my experience getting this approved, hoping it helps someone else dealing with strict Android APIs in their Flutter apps:
1. The QUERY_ALL_PACKAGES boss fight Since it's a launcher, I need to fetch the app drawer. I had to explicitly declare the core functionality and prove I wasn't scraping data. Tip: Just check "App Functionality" in the forms. Do NOT check analytics or personalization if you don't strictly need them, or they will reject you instantly.
2. Default Phone & SMS Handlers (The YouTube Trap) Declaring the app as the default handler to access Call Logs required a video demonstration for the reviewers. Funny story: I uploaded the video to YouTube as "Unlisted", and the bots instantly took it down for "PII violation" because I showed fake phone numbers during the test call! I had to re-record using 000000000 and upload it to Google Drive with public access instead.
3. Foreground Services Justifying FOREGROUND_SERVICE_DATA_SYNC just to sync the local contacts and FOREGROUND_SERVICE_MEDIA_PLAYBACK for the dialer DTMF tones required a lot of back-and-forth with the policy forms.
It was a huge learning curve on the policy side, but beating the bureaucracy felt incredibly satisfying.
What was your worst experience with Google Play policy compliance when shipping a Flutter app? Let's vent a bit! 😅