The Android application permission model in Android 6.0 and later is designed to make permissions more understandable, useful, and secure for users. The model moved Android applications that require dangerous permissions (see Affected permissions) from an install time permission model to runtime permission model:
Runtime permissions provide users additional context and visibility into the permissions applications are seeking or have been granted. The runtime model also encourages developers to help users understand why applications require the requested permissions and to provide greater transparency about the benefits and hazards of granting or denying permissions.
Users can revoke application permissions using the Apps menu in Settings.
Android 6.0 and later requires dangerous permissions to use a runtime permissions
model. Dangerous permissions are higher-risk permissions (such as
READ_CALENDAR
) that grant requesting applications access to private
user data or control over the device that can negatively impact the user. To
view a list of dangerous permissions, run the command:
adb shell pm list permissions -g -d
Android 6.0 and later does not change the behavior of normal permissions (all
non-dangerous permissions including normal, system, and signature permissions).
Normal permissions are lower-risk permissions (such as
SET_WALLPAPER
) that grant requesting applications access to
isolated application-level features with minimal risk to other applications, the
system, or the user. As in Android 5.1 and earlier releases, the system
automatically grants normal permissions to a requesting application at
installation and does not prompt the user for approval. For details on
permissions, refer to
<permission>
element documentation.
The runtime permission model applies to all applications, including pre-installed apps and apps delivered to the device as part of the setup process. Application software requirements include:
ACTION_CALL
may
have Phone permission access). For details, see
Creating exceptions.Permissions granted to applications on Android 5.x remain granted after updating to Android 6.0 or later, but users can revoke those permissions at any time.
When integrating the application runtime permissions model for Android 6.0 and later, you must update pre-installed applications to work with the new model. You can also define exceptions for apps that are the default handlers/providers for core functionality, define custom permissions, and customize the theme used in the PackageInstaller.
Applications on the system image and pre-installed applications are not automatically pre-granted permissions. We encourage you to work with pre-installed app developers (OEM, Carrier, and third party) to make the required app modifications using developer guidelines. Specifically, you must ensure that pre-installed applications are modified to avoid crashes and other issues when users revoke permissions.
Pre-loaded apps that use dangerous permissions must target API level 23 or higher and maintain the Android 6.0 and later AOSP permission model (i.e. the UI flow during an app installation should not deviate from the AOSP implementation of PackageInstaller, users can even revoke the dangerous permissions of pre-installed apps, etc.).
Only activities can request permissions; services cannot directly request permissions.
The goal is to avoid confusing users with permission requests that appear out of context.
If desired, you can customize the Permissions UI theme by
updating the default device themes (Theme.DeviceDefault.Settings
and Theme.DeviceDefault.Light.Dialog.NoActionBar
) used by
PackageInstaller. However, because consistency is critical for app developers,
you cannot customize the placement, position, and rules of when the Permissions
UI appears.
To include strings for additional languages, contribute the strings to AOSP.
You can pre-grant permissions to applications that are default handlers or
providers for core OS functionality using the
DefaultPermissionGrantPolicy.java
in PackageManager. Examples:
ACTION_CALL (Dialer) Default Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default Phone, Contacts, SMS
You can define custom permissions and groups as normal or dangerous and add OEM/Carrier-specific permissions to existing permissions groups, just as you could in Android 5.x and earlier releases.
In Android 6.0 and later, if you add a new dangerous permission, it must be handled in the same way as other dangerous permissions (requested during app runtime and revocable by users). Specifically:
Android includes Compatibility Test Suite (CTS) tests that verify individual permissions are mapped to the correct Groups. Passing these tests is a requirement for Android 6.0 and later CTS compatibility.