Appearance
Android permissions list and adb grant commands
In short: This Android permissions list covers every runtime (dangerous) permission in Android's reference, the special app-access permissions and the common normal ones, with the API level each arrived in. Pick one for the adb commands that grant, revoke or check it for your app, paste a manifest to see which permissions need granting, and export the list as CSV.
69 permissions shown
| Permission | What it allows | Type | API | Group |
|---|---|---|---|---|
| Continue a call that was started in another app. | Runtime | 28 | Phone | |
| Use location while the app is in the background. | Runtime | 29 | Location | |
| Use approximate location. | Runtime | 1 | Location | |
| Use precise location. | Runtime | 1 | Location | |
| Find and connect to devices on the local network (Wi-Fi or Ethernet, not mobile data or VPN). | Runtime | 37 | – | |
| Read the locations saved in photos and videos. | Runtime | 29 | – | |
| Recognise physical activity, such as walking, cycling or steps. | Runtime | 29 | Physical activity | |
| Add voicemails to the system. | Runtime | 14 | Phone | |
| Answer incoming phone calls. | Runtime | 26 | Phone | |
| Make the phone discoverable to nearby Bluetooth devices. | Runtime | 31 | Nearby devices | |
| Connect to paired Bluetooth devices. | Runtime | 31 | Nearby devices | |
| Find nearby Bluetooth devices. | Runtime | 31 | Nearby devices | |
| Read body sensors such as a heart rate monitor. | Runtime | 20 | Body sensors | |
| Read body sensors while the app is in the background. | Runtime | 33 | Body sensors | |
| Start phone calls without the dialler. | Runtime | 1 | Phone | |
| Use the camera. | Runtime | 1 | Camera | |
| See the list of accounts on the phone. | Runtime | 1 | Contacts | |
| Find and connect to nearby devices over Wi-Fi. | Runtime | 33 | Nearby devices | |
| Show notifications. | Runtime | 33 | Notifications | |
| See and redirect outgoing calls. (deprecated in API 29) | Runtime | 1 | – | |
| Measure the distance to devices with the generic ranging module. | Runtime | 36 | – | |
| Read calendar events. | Runtime | 1 | Calendar | |
| Read the call log. | Runtime | 16 | Call logs | |
| Read contacts. | Runtime | 1 | Contacts | |
| Read shared storage. | Runtime | 16 | – | |
| Read audio files in shared storage. | Runtime | 33 | Music and audio | |
| Read images in shared storage. | Runtime | 33 | Photos and videos | |
| Read videos in shared storage. | Runtime | 33 | Photos and videos | |
| Read only the photos and videos the person picked. | Runtime | 34 | Photos and videos | |
| Read the phone’s own numbers. | Runtime | 26 | Phone | |
| Read phone state, such as the network and whether a call is active. | Runtime | 1 | Phone | |
| Read text messages. | Runtime | 1 | SMS | |
| Receive MMS messages. | Runtime | 1 | SMS | |
| Receive text messages. | Runtime | 1 | SMS | |
| Receive WAP push messages. | Runtime | 1 | SMS | |
| Record audio with the microphone. | Runtime | 1 | Microphone | |
| Send text messages. | Runtime | 1 | SMS | |
| Use SIP calling. | Runtime | 9 | Phone | |
| Measure the distance to ultra-wideband devices. | Runtime | 31 | Nearby devices | |
| Add and change calendar events. | Runtime | 1 | Calendar | |
| Change the call log. | Runtime | 16 | Call logs | |
| Change contacts. | Runtime | 1 | Contacts | |
| Write to shared storage. | Runtime | 4 | – | |
| Draw over other apps (overlays). | Special | 1 | – | |
| Change system settings such as screen brightness or timeout. | Special | 1 | – | |
| Read and write all files in shared storage (All files access). | Special | 30 | – | |
| Ask to install other apps (Install unknown apps). | Special | 23 | – | |
| Set alarms that go off at an exact time. | Special | 31 | – | |
| Read app usage statistics (Usage access). | Special | 23 | – | |
| Change or delete media files without asking each time (Media management). | Special | 31 | – | |
| Open network connections. | Normal | 1 | – | |
| See whether and how the phone is connected to a network. | Normal | 1 | – | |
| See Wi-Fi state and the network’s details. | Normal | 1 | – | |
| Change Wi-Fi connectivity state. | Normal | 1 | – | |
| Connect to paired Bluetooth devices (before BLUETOOTH_CONNECT, API 31). | Normal | 1 | – | |
| Run a foreground service. | Normal | 28 | – | |
| Keep the processor from sleeping or the screen from dimming. | Normal | 1 | – | |
| Start when the phone has finished booting. | Normal | 1 | – | |
| Use the vibrator. | Normal | 1 | – | |
| Use the biometric prompt (fingerprint or face). | Normal | 28 | – | |
| Show full-screen notifications, such as an incoming call. | Normal | 29 | – | |
| See every installed app, regardless of package visibility rules. | Normal | 30 | – | |
| Ask to be left out of battery optimisation. | Normal | 23 | – | |
| Read the Do Not Disturb policy. | Normal | 23 | – | |
| Use NFC. | Normal | 9 | – | |
| Use exact alarms without asking, for apps whose core feature needs them. | Normal | 33 | – | |
| Read and write secure system settings. | System | 3 | – | |
| Read the system logs. | System | 1 | – | |
| Read system state from system services (dumpsys). | System | 1 | – |
Commands for CAMERA
android.permission.CAMERA · Runtime (asks the person) · added in API 1 · protection level: dangerous
Grant it
adb shell pm grant com.example.app android.permission.CAMERARevoke it
adb shell pm revoke com.example.app android.permission.CAMERA- Careful: Android stops the app when one of its permissions is revoked, so it starts afresh next time.
Check whether the app has it
adb shell dumpsys package com.example.app | grep android.permission.CAMERACheck an app’s manifest
Data from the Manifest.permission reference, read on 2026-11-02. Commands run only when you paste them into your terminal; nothing here leaves your browser.
Resetting permissions by hand on every test phone takes time. BenchFleet shows every connected phone on one screen, and on Pro its group actions install a build on many phones at once and its workflows set language, time zone, dark mode and font size for a run and put them back afterwards. See testing apps on real phones.
Free for up to 3 phones, with no account. Pro adds workflows, schedules and AI for up to 25 phones from £12 a month + VAT.
How to use it
- Find a permission by name, by what it guards (camera, location, notifications) or by type.
- Pick it in the table and fill in your app's package: the commands below grant it, take it away or show whether the app holds it, for the shell you use.
- Check a whole app by pasting its
AndroidManifest.xml, the output ofaapt dump permissions app.apk, or a list of names. The table says what each permission needs in a test, and one script grants the runtime ones and allows the special ones. - Export the filtered list as CSV for a test plan, or print it.
The four kinds of permission
| Kind | Who grants it | adb |
|---|---|---|
| Runtime (dangerous) | The person, in a dialog while the app runs (Android 6 and newer) | pm grant / pm revoke |
| Special app access | The person, on a page in Settings, such as Display over other apps | appops set PACKAGE OP allow |
| Normal | Android, at install, when the manifest declares it | Nothing to grant |
| Signature and system | Only apps signed with the platform key, or system apps | Not for ordinary apps |
Android explains each in permissions on Android, and the pm and appops shell commands in its adb guide.
Examples
Grant the camera to an app and check it:
bash
adb shell pm grant com.example.app android.permission.CAMERA
adb shell dumpsys package com.example.app | grep android.permission.CAMERAThe second line prints android.permission.CAMERA: granted=true once it is granted. In PowerShell, use | Select-String android.permission.CAMERA instead of grep; in Command Prompt, | findstr android.permission.CAMERA.
Let an app draw over other apps, then put it back:
bash
adb shell appops set com.example.app SYSTEM_ALERT_WINDOW allow
adb shell appops set com.example.app SYSTEM_ALERT_WINDOW defaultTest the notification prompt on Android 13 again by taking the permission away (the app is stopped):
bash
adb shell pm revoke com.example.app android.permission.POST_NOTIFICATIONSThings that catch testers out
- Background location comes second.
ACCESS_BACKGROUND_LOCATIONworks only with coarse or fine location, and the app must ask for it separately. Grant the foreground permission first. - Storage changed twice.
WRITE_EXTERNAL_STORAGEdoes nothing for apps that target Android 11 (API 30) or higher, andREAD_EXTERNAL_STORAGEdoes nothing from API 33, whereREAD_MEDIA_IMAGES,READ_MEDIA_VIDEOandREAD_MEDIA_AUDIOreplace it. - Notifications need asking from Android 13.
POST_NOTIFICATIONSbecame a runtime permission in API 33. - Revoking stops the app. Android ends the app's process when you revoke one of its runtime permissions.
- Denied twice means denied. On Android 11 and newer, after a person denies a permission twice, Android stops showing the dialog.
pm grantgives the permission directly; clearing the app's data (pm clear, which deletes it) or reinstalling the app lets you test the dialog again.
Permissions are one section of the mobile app testing checklist; the ADB command builder writes the install, launch and clear-data commands around them.
Related free tools
- ADB command builderInstalls, logcat filters, screenshots, Wi-Fi pairing and more, for one phone or every phone, in bash or PowerShell.
- ADB intent and deep link builderam start and am broadcast with extras, flags and deep links, quoted for the phone and your shell.
- MCP config generatorOne MCP server, written for Claude Code, Codex, Cursor, VS Code and Claude Desktop, with secrets kept out.
Questions
What are dangerous permissions in Android?
Permissions whose protection level is dangerous, such as CAMERA, ACCESS_FINE_LOCATION or POST_NOTIFICATIONS. They guard private data or features, so from Android 6 (API 23) apps ask for them while running and the person can allow or deny each one. This list has all 43 that Android's reference marks dangerous.
How do I grant a permission with adb?
For a runtime permission, run adb shell pm grant followed by the package and the full permission name, such as adb shell pm grant com.example.app android.permission.CAMERA. Special access such as Display over other apps uses adb shell appops set with the package, the app-op and allow.
Why does pm grant fail with "not a changeable permission type"?
The permission is not a runtime permission. Normal permissions are granted at install, special ones need appops, and signature or system permissions cannot be granted to an ordinary app.
Why did my app close when I revoked a permission?
Android stops an app's process when one of its runtime permissions is revoked, so the app does not keep using access it has lost. It starts afresh the next time it opens.
Can I grant every permission at install?
Yes. adb install -g app.apk grants all the runtime permissions the app's manifest declares. This tool's manifest check writes the individual pm grant and appops commands when you want only some.
Does it send my manifest or package name anywhere?
No. The list and the manifest check work in your browser, so nothing leaves your browser; the commands run only when you paste them into your terminal.
Where does the data come from?
From the Manifest.permission reference on developer.android.com, read on 2 November 2026; the API and protection levels are copied from it, and the plain descriptions are ours. Android adds permissions in new versions, so the reference decides.
Start with the Free plan
Free for up to 3 phones, with no account. Pro adds workflows, schedules and AI for up to 25 phones from £12 a month + VAT.
- A Free plan with no time limit and no account
- Starts in Local mode, with no telemetry or analytics in the app