Since its debut, Android has balanced two competing goals: giving apps the power they need to function, while protecting user privacy. The permission model is the primary mechanism that mediates this balance. Over the years the model has undergone several major revisions, each aimed at giving users more visibility and control. This article walks through the evolution of Android permissions, explains how the current system works, and offers concrete steps you can take to keep your data safe.
In the first few Android releases (up to Android 5.1 Lollipop), permissions were granted at install time. When you tapped Install on an app, a dialog displayed a list of all permissions the app requested, such as READ_CONTACTS or ACCESS_FINE_LOCATION. Users had only two choices:
There was no way to grant a subset of permissions or to revoke them later without uninstalling the app. This “all‑or‑nothing” approach led to privacy concerns, especially as apps began requesting increasingly sensitive data.
Marshmallow (Android 6.0) introduced the most significant shift: runtime permissions. Instead of granting every permission up front, the system now asks for dangerous permissions only when the app actually needs them. This change brought several benefits:
Permissions were also divided into two categories:
INTERNET).CAMERA, READ_CONTACTS).Today, Android’s permission system builds on the runtime model introduced in Marshmallow, with refinements added in later releases (Android 7‑13). The core concepts remain:
Dangerous permissions are organized into permission groups. Granting one permission in a group often grants the others, simplifying the user experience. For example, the Location group includes ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION. When you approve “Location” for an app, both permissions become available.
Android 12 added the ability to grant a permission for a single use. After the app finishes its current session, the permission is automatically revoked. This is useful for scenarios like a navigation app that needs location only while you’re actively using it.
Starting with Android 10, apps that need location, microphone, or camera access while running in the background must request a special “background” permission. Users can deny this while still allowing foreground access, limiting covert data collection.
Android 11 introduced “auto‑reset” for apps that haven’t been used for several months. The system automatically revokes all runtime permissions, prompting the user to re‑grant them if the app is opened again. This helps keep stale permissions from lingering indefinitely.
Even though the system handles most prompts automatically, you still have the power to review and adjust permissions at any time. Here’s a step‑by‑step guide for typical Android skins (Pixel, Samsung, etc.).
**Tip:** If you notice an app you rarely use asking for a high‑risk permission (e.g., microphone), consider revoking it or uninstalling the app.
While this article is aimed at end‑users, understanding the developer side helps explain why certain prompts appear.
All permissions an app might request must be listed in AndroidManifest.xml. Example:
<manifest ...>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
Only dangerous permissions require a runtime request; normal ones are granted automatically.
Developers call requestPermissions() (or the newer ActivityResultContracts.RequestPermission) when they need a dangerous permission. The system shows a dialog that includes the permission name and, optionally, a custom rationale provided via shouldShowRequestPermissionRationale().
If a user denies a permission, the app should degrade gracefully—disable the feature that needs the permission and inform the user why the feature is unavailable.
Starting with Android 13, apps targeting API level 33 must request the POST_NOTIFICATIONS permission to send notifications. This illustrates how the permission model continues to expand to cover new privacy‑sensitive capabilities.
Even with granular controls, some risks remain:
Mitigation strategies include reading app reviews, checking the developer’s reputation, and using privacy‑focused tools like Permission Manager or third‑party privacy dashboards.
The permission model is backward compatible, but the user experience differs:
If you’re using an older device, consider upgrading to a newer Android version (if the hardware supports it) or installing a custom ROM that backports newer permission features.
Google continues to iterate on privacy. Upcoming changes hinted at in Android developer previews include:
While these features are still evolving, they signal a trend toward giving users even tighter control over what data apps can access.
The Android permission model has come a long way from its all‑or‑nothing beginnings. By understanding the categories, runtime flow, and the tools at your disposal, you can make informed decisions about which apps get access to your personal data. Regularly reviewing permissions, leveraging one‑time grants, and staying on a recent Android version are simple habits that dramatically improve privacy without sacrificing functionality.
Remember: the best defense against unwanted data collection is an informed user. Use the steps outlined above, and you’ll keep your Android experience both powerful and secure.









