Android permissions by protection level
Android gates sensitive capabilities behind permissions, each carrying a protection level that decides how it is granted. Normal permissions are auto-granted at install; dangerous ones require a runtime prompt the user can deny; signature permissions are limited to apps signed with the same key. This searchable reference lists common permissions with their level, group and runtime requirement.
How it works
Declare every permission in the manifest, then request dangerous ones at runtime:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
if (checkSelfPermission(Manifest.permission.CAMERA) != PERMISSION_GRANTED) {
requestPermissions(arrayOf(Manifest.permission.CAMERA), REQ_CODE)
}
A normal permission is granted at install with no prompt. A dangerous
permission also needs the user to approve the runtime request, and they can
revoke it later in Settings, so always check checkSelfPermission before use.
Tips and notes
- Request a dangerous permission only when the feature that needs it is invoked.
- Since Android 11, each permission is granted individually even within a group.
- Handle denial gracefully — degrade the feature rather than crashing.
- Background location (
ACCESS_BACKGROUND_LOCATION) needs a separate, stricter flow.