99testsStart a job

Test case library · Mobile platform

Test cases for runtime permissions on Android and iOS

This flow covers how an app asks for, uses and recovers from runtime permissions: camera, location, contacts, notifications, photos and Bluetooth, on Android and iOS. Most field failures come from paths teams rarely test: a permanent denial with no way back, access revoked from Settings while the app is in the background, limited photo access, and the extra permissions that Xiaomi, Vivo and Oppo phones add. Each of these can leave a user stuck on a KYC, address or payment screen.

37 test cases9 release-blocking (P1)12 need a real phoneUpdated 2026-10-29

From the reviews. Features that don't work are the largest group of malfunction reviews (30.9% across 187 apps), yet only 2.2% name the phone or Android version, which is what a permission problem usually depends on.

India App Quality Report

In scope

  • Camera, microphone, location, contacts and Bluetooth prompts
  • Photos on Android 13+, Android 14 selected photos and iOS limited access
  • Notification permission state inside the app
  • Deny, deny permanently and revoke from Settings
  • Explanation screens before system dialogs
  • Auto-reset for unused apps and phone maker extras

Out of scope

  • Notification delivery, covered by push notification tests
  • Accuracy of maps and address lookup

Before you start

  • Fresh installs on Android 11 or lower, Android 12, Android 13 and Android 14 or later, plus an iPhone
  • A Xiaomi, Vivo or Oppo phone and a Samsung phone, including a budget model with 3–4 GB RAM
  • A dual-SIM phone with two active SIMs
  • A Bluetooth device the app can connect to, if it has that feature
  • Sample documents and QR codes that contain no real personal data
Show
Add to a test plan

Happy path7

PRM-01

Allow the camera the first time a feature needs it

P1functionalreal phone
  1. Install fresh and open a camera feature, such as Scan QR or document capture.
  2. Read the app's explanation screen, if shown, and continue.
  3. Tap Allow, or While using the app, on the system dialog.
  4. Scan a QR code or capture a document.

Expected: The camera preview opens straight after allowing, without restarting the feature. The QR code is read or the photo is captured sharply.

Why a real phone: Camera preview, focus and QR reading need a real camera

PRM-02

Allow precise location while using the app to set a delivery address

P1functionalreal phone
  1. Open the add-address screen and tap Use current location.
  2. Choose While using the app with precise location on.
  3. Wait for the map pin and the filled address.

Expected: The pin lands at the tester's real position and the address fields, including the PIN code, fill in. The user can still move the pin and edit the address.

Why a real phone: GPS accuracy depends on real hardware, sky view and nearby buildings

PRM-03

Choose approximate location on Android 12+ or turn off Precise on iPhone

P2functional
  1. When the location dialog appears, choose Approximate on Android, or turn Precise off on iPhone.
  2. Open the address and nearby stores screens.
  3. Tap Use current location.

Expected: Features that need only the area, such as nearby stores, work. Where an exact pin is needed, the app explains why and asks for precise location or lets the user set the pin by hand.

PRM-04

Allow contacts and pick contacts saved in different number formats

P2functional
  1. Save test contacts in three formats: with +91, with a leading 0, and with spaces.
  2. Open the pay or refer screen and allow contacts access.
  3. Pick each test contact.

Expected: The contact list loads with search. Each picked number fills in as the same 10-digit mobile number, without +91, 0 or spaces.

PRM-05

Pick a document photo with full photo access on Android 13 or later

P2functional
  1. On Android 13 or later, open a document upload screen.
  2. Tap the gallery option and choose Allow or Allow all on the photos dialog.
  3. Pick a photo of a sample document and submit it.

Expected: The chosen photo uploads with a readable preview. No storage or files permission is requested.

PRM-06

Allow Nearby devices to connect to a Bluetooth device

P2functionalreal phone
  1. Turn on Bluetooth and keep a supported device nearby, such as a printer or card reader.
  2. Open the app's connect screen and allow Nearby devices on Android 12+, or Bluetooth on iPhone.
  3. Select the device and connect.

Expected: The device appears in the list, connects and shows as connected. On Android 12 or later, the app does not also ask for location unless it explains why.

Why a real phone: Needs real Bluetooth hardware and a nearby device to pair with

PRM-07

A fresh install asks for no permissions until a feature needs one

P2functional
  1. Install the app fresh and complete sign-up.
  2. Browse the main screens without using camera, location, contacts or Bluetooth features.
  3. Then open each of those features once.

Expected: No permission dialog appears on the splash screen or before sign-up is finished. Each permission is requested only when its feature is first opened, one at a time.

Validation & negative7

PRM-08

Tap Not now on the app's explanation screen

P2negative
  1. Open a feature that shows an explanation screen before the system dialog.
  2. Tap Not now or close the explanation.
  3. Open the same feature again later and agree.

Expected: No system dialog appears after Not now. When the feature is reopened and the user agrees, the system dialog appears as normal.

PRM-09

Deny the camera once and use the alternative

P2negative
  1. Open Scan QR or document capture and tap Don't allow on the camera dialog.
  2. Read the screen that follows.
  3. Use the alternative offered, such as uploading a QR image or a document photo.

Expected: The app explains what the camera is needed for and offers a way to continue without it. The alternative completes the task, with no crash or black preview.

PRM-10

Deny the camera permanently and turn it on from Settings

P1negative
  1. Deny the camera twice on Android, or once on iPhone, so the dialog stops appearing.
  2. Open the camera feature again.
  3. Tap the option to open Settings, allow the camera and return.

Expected: The app explains that camera access is off and opens its own permission page in Settings. On return, the camera starts without restarting the app.

PRM-11

Deny location and enter the address by hand

P1negative
  1. On the add-address screen, tap Use current location and then Don't allow.
  2. Enter the address and PIN code by hand.
  3. Complete an order or booking with this address.

Expected: The app offers manual entry straight away, without asking again in a loop. The order completes with the typed address and no further location prompts.

PRM-12

Deny contacts and type the number instead

P2negative
  1. Open the pay or refer screen and tap Don't allow on the contacts dialog.
  2. Type a mobile number into the number field.
  3. Continue to the next step, then revisit the screen.

Expected: The number field works without contacts access and the flow continues. The contacts dialog does not reappear on every visit.

PRM-13

Location permission is allowed but location is off on the phone

P2negative
  1. Allow location for the app, then turn off Location in quick settings.
  2. Open a screen that uses the current location.
  3. Follow the app's prompt to turn location on.

Expected: The app says that location is off on the phone, not that permission is denied, and offers to turn it on. After turning it on, the current location loads.

PRM-14

Allow only this time, then come back later

P2negative
  1. On the location or camera dialog, choose Only this time, or Allow once on iPhone.
  2. Use the feature, then close the app and wait a few minutes.
  3. Open the app and use the same feature again.

Expected: The feature works during the first visit. On return, the app asks again in the normal way and does not crash or assume access is still granted.

Edge cases6

PRM-15

Allow access to selected photos only on Android 14 or later

P1edge
  1. On Android 14 or later, open a document upload and choose Select photos and videos.
  2. Select two photos and return to the app.
  3. Try to add a third photo that was not selected.

Expected: Only the selected photos appear, with a clear way to select more. The app does not treat limited access as a denial or block the upload.

PRM-16

Choose limited photo access on iPhone

P1edge
  1. On an iPhone, open a document upload and choose Limit Access or Select Photos.
  2. Select two photos and return to the app.
  3. Try to add a photo that was not selected.

Expected: The selected photos can be uploaded, and the app offers a way to change the selection. It does not keep showing a full-access request or block the upload.

PRM-17

Video KYC with the camera allowed and the microphone denied

P2edgereal phone
  1. Start a video KYC or video call feature.
  2. Allow the camera and tap Don't allow for the microphone.
  3. Read the screen that follows and allow the microphone from it.

Expected: The app says the microphone is needed before the call starts and offers a way to allow it. Once both are allowed, video and audio both work.

Why a real phone: Needs a real camera and microphone for the video call to start

PRM-18

Ask for location all the time for a background feature

P2edge
  1. Open a feature that needs background location, such as live trip sharing.
  2. Allow location while using the app first.
  3. Follow the app's request for all-the-time access through to Settings.

Expected: The app explains why background access is needed before sending the user to Settings. If the user keeps While using the app, the feature says what will not work in the background.

PRM-19

Permissions reset after the app has been unused

P2edge
  1. In App info, note the setting that removes permissions if the app is unused.
  2. Revoke all the app's permissions in Settings, as an automatic reset would.
  3. Open the app and use the camera, location and contacts features.

Expected: Each feature asks for its permission again with a reason, and no screen crashes. If the app needs background work, it explains how to turn off the unused-app setting.

PRM-20

The in-app alerts switch matches the system notification permission

P2edge
  1. On Android 13 or later, block notifications for the app in system Settings.
  2. Open the app's notification settings.
  3. Turn on order alerts in the app.

Expected: The app shows that notifications are blocked by the phone and offers to open Settings. Its switch never shows On while the system permission is off.

Interruptions & network5

PRM-21

Revoke camera or location in Settings while the app is in the background

P1interruption
  1. Start a document capture, then press Home.
  2. In Settings, turn off the app's camera permission.
  3. Return to the app from recent apps.
  4. Repeat with location while a map screen is open.

Expected: The app reopens without crashing, explains that access was removed and asks again when needed. Progress such as earlier KYC steps is kept.

PRM-22

Grant a permission from Settings on a budget phone and return mid-flow

P2interruptionreal phone
  1. On a budget phone with 3–4 GB RAM, reach a later step of a multi-step form.
  2. Deny a permission permanently, then use the app's link to Settings.
  3. Allow it in Settings and return to the app.

Expected: The app returns to the same step with earlier entries kept, even if the system restarted it. The newly allowed feature works without another dialog.

Why a real phone: Budget phones often kill the app while the user is in Settings

PRM-23

An incoming call arrives while the permission dialog is open

P3interruptionreal phone
  1. Open a feature so the system permission dialog appears.
  2. Receive a voice call on the phone and answer it.
  3. End the call and return to the app.

Expected: The dialog is still shown or the app asks again, and the feature continues after a choice. The app does not freeze on a blank screen.

Why a real phone: Needs a real SIM call to interrupt the system dialog

PRM-24

Rotate or lock the phone while the permission dialog is open

P3interruption
  1. Open a feature so the system permission dialog appears.
  2. Rotate the phone, or lock and unlock it.
  3. Tap Allow.

Expected: Only one dialog is shown, and after Allow the feature opens on the right screen. The app does not ask twice or lose the result.

PRM-25

Find the current location indoors or with weak GPS

P2interruptionreal phone
  1. Go to a basement, lift lobby or inner room with weak GPS.
  2. Tap Use current location.
  3. Wait, then go near a window and try again.

Expected: The app shows a finding-location state and, if it takes too long, offers to set the pin or type the address. It never places the pin at an old or default location without saying so.

Why a real phone: Indoor GPS weakness and fallback to network location happen only on real hardware

Device & OS6

PRM-26

Phone makers' extra permissions on Xiaomi, Vivo and Oppo

P2compatibilityreal phone
  1. On a Xiaomi phone, open the app's permissions in the phone's security or app settings.
  2. Check extra items such as Display pop-up windows while running in the background.
  3. Test a feature that relies on them, such as an incoming request screen.
  4. Repeat on a Vivo or Oppo phone.

Expected: If the feature needs one of these extra permissions, the app explains which one and how to turn it on for that phone. With it allowed, the feature works.

Why a real phone: These extra permissions exist only in these phone makers' Android skins

PRM-27

Permission explanations match the dialog wording on each phone

P3compatibilityreal phone
  1. Read the app's explanation screen for location and camera.
  2. Compare its instructions with the buttons on the system dialog on Xiaomi, Samsung and iPhone.
  3. Follow the instructions exactly on each phone.

Expected: The instructions match the buttons each phone shows, or avoid naming buttons. Following them leads to access being allowed on every phone.

Why a real phone: Permission dialog wording differs across phone makers' Android skins and iOS

PRM-28

Photo access on Android 12 or lower compared with Android 13 or later

P1compatibility
  1. On Android 12 or lower, open a document upload and allow storage access.
  2. On Android 13 or later, open the same upload.
  3. Pick and upload a photo on both phones.

Expected: The older phone asks for storage access, and the newer one asks for photos or opens the system photo picker. On neither phone does the upload fail silently because the wrong permission was requested.

PRM-29

Bluetooth scanning on Android 11 or lower asks for location

P2compatibilityreal phone
  1. On a phone with Android 11 or lower, open the app's connect screen.
  2. Read the explanation and allow location.
  3. Turn the phone's Location setting off and scan again.

Expected: The app explains that this Android version needs location to find Bluetooth devices. With Location off, it says so instead of showing an empty device list.

Why a real phone: Needs real Bluetooth hardware and a nearby device to scan for

PRM-30

Load a very large contact list on a budget phone

P2performancereal phone
  1. On a budget phone, add or sync several thousand contacts.
  2. Open the pay or refer screen and allow contacts.
  3. Scroll the list and search for a name.

Expected: The list appears without an App not responding dialog, and search results show as the user types. Scrolling stays smooth.

Why a real phone: Freezes with large contact lists show up on low-RAM budget hardware

PRM-31

SIM verification needs phone and SMS permissions on a dual-SIM phone

P2compatibilityreal phone
  1. On a dual-SIM phone, start registration that verifies the SIM, as banking and UPI apps do.
  2. Deny the phone or SMS permission when asked.
  3. Read the explanation, then allow it and choose a SIM slot.

Expected: After the denial, the app explains that SIM verification cannot continue and how to allow it. After allowing, both SIMs are listed by carrier name and the chosen SIM is verified.

Why a real phone: Needs two real SIMs and carrier SMS to verify the chosen slot

Security & privacy4

PRM-32

The app asks only for permissions its features need

P2security
  1. Use every main feature once and allow each permission asked.
  2. Open App info, Permissions, and list everything allowed or requested.
  3. Match each permission to a feature that used it.

Expected: Every permission listed maps to a feature the tester used. No permission such as contacts or SMS appears without a matching feature.

PRM-33

Camera, microphone and location indicators turn off after use

P2security
  1. Use the camera and microphone features, then leave those screens.
  2. Send the app to the background.
  3. Watch the status bar and privacy indicators for a minute.

Expected: The camera and microphone indicators turn off when the user leaves those screens. Location is not shown as in use in the background unless a background feature is on.

PRM-34

Contacts access is revoked after being allowed

P2security
  1. Allow contacts and open the pay or refer screen.
  2. Revoke contacts in Settings.
  3. Open the same screen again.

Expected: The app no longer shows the phone's contact list and asks for access again only if needed. The screen still lets the user type a number.

PRM-35

Document photos taken in the app are not saved to the gallery

P1security
  1. Capture a photo of a sample document, such as a dummy PAN card, inside the app.
  2. Finish the upload.
  3. Open the phone's gallery and recent files.

Expected: The captured document photo does not appear in the gallery or in shared folders. Only the app holds it, and only until the upload is done.

Accessibility & language2

PRM-36

Permission explanation screens with a screen reader and the largest font

P3accessibility
  1. Set the font and display size to the largest and turn on TalkBack or VoiceOver.
  2. Open features that show permission explanation screens.
  3. Move through each element and reach the Continue and Not now buttons.

Expected: All text is read in a sensible order, and both buttons are announced and reachable. Nothing is cut off at the largest size.

PRM-37

Permission explanation screens in Hindi

P2localization
  1. Set the app language to Hindi with the phone in English.
  2. Open features that show permission explanations and Settings instructions.
  3. Follow the instructions to allow a permission from Settings.

Expected: The explanations and instructions are in Hindi and still make sense when the system dialog and Settings appear in English. Following them leads to access being allowed.

In the field

Where runtime permissions breaks on real phones

  • Asking for storage access on Android 13 or later shows no dialog at all, so document uploads fail silently on newer phones.
  • After a permanent denial, the app keeps showing a button that does nothing instead of sending the user to Settings.
  • Revoking a permission in Settings restarts the app in the background, and it comes back crashing or with KYC progress lost.
  • Selected-photos access on Android 14 and limited access on iOS are treated as a denial, blocking uploads even though the user picked the right photo.
  • Xiaomi, Vivo and Oppo phones need extra permissions, such as showing pop-up windows from the background, and incoming-request screens fail without them.
  • Approximate location drops the delivery pin in the wrong place, and the app never asks for precise location or lets the user move the pin.

Run these 37 cases on real phones

They fit the Standard package: 10 × 45-minute sessions on 4 phones or browsers of your choice, up to ~50 cases, ₹18,999 + GST ($249), verified report in 3 business days. The 9 P1 cases alone fit Starter (₹9,999 + GST).

Download the CSV, pick the package at checkout and upload the file with your build. Testers run them on their own phones, on Jio, Airtel and Vi.

Questions

About testing runtime permissions

What happens when a user denies a permission permanently?

On Android 11 and later, once the user denies a permission twice the system stops showing the dialog, and on iOS this happens after one denial. The app must detect this, explain what the feature needs and open its own page in Settings. Test that the feature works as soon as the user returns from Settings, without restarting the app.

How do I test selected photos access on Android 14?

On an Android 14 or later phone, open a photo upload and choose to select photos and videos instead of allowing all. Pick a few photos and check that the app shows them, lets the user select more and completes the upload. Repeat with limited photo access on iPhone, which works in a similar way.

Why does an app restart when a permission is turned off in Settings?

Android and iOS stop the app's process when a granted permission is revoked from Settings, so the app starts fresh when the user returns. The app must restore the screen and any progress, then ask for the permission again when it is needed. Test this on camera and location screens in the middle of a multi-step flow.

Related flows

Test these next

Your AI wrote the test cases. Run them on real phones.

99tests runs your cases, AI-generated ones included, on the phones, laptops and browsers your users own. Every finding is verified, serious bugs come with a screen recording, and each case comes back pass, fail, blocked or not run.