How to Handle Android Runtime Permissions

Android Runtime Permissions in any application are crucial for ensuring user privacy and security. To create a trustworthy app, you need to request and manage permissions properly. In this blog post, we’ll explore Android’s runtime permission model, which allows you to request and handle permissions dynamically in your app.

Understanding Android Runtime Permissions

Android apps require specific permissions to access sensitive data or perform certain actions on a user’s device. For example, accessing the camera, location, or contacts requires the corresponding permissions.

Permissions are divided into two categories:

  • Normal Permissions: These are automatically granted at installation and are considered safe.
  • Dangerous Permissions: These are permissions that require explicit user approval at runtime. These are sensitive and can impact user privacy.

Android Runtime Permission Model

The runtime permission model was introduced in Android 6.0 (API level 23) to enhance user control and privacy. Under this model, you request dangerous permissions at runtime when the user is about to perform an action that requires the permission. Here’s how you can handle permissions in your Android app:

1. Check for Permission

Before performing an action that requires a permission, check if the permission has been granted.

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
    // Permission is granted; you can perform the action.
} else {
    // Permission is not granted; you need to request it.
    ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.CAMERA }, CAMERA_PERMISSION_REQUEST);

2. Request Permission

When the permission is not granted, you can request it. The user will see a system dialog asking for permission.

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == CAMERA_PERMISSION_REQUEST) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Permission granted; you can now perform the action.
        } else {
            // Permission denied; handle the situation accordingly.

3. Explain Why You Need the Permission

When requesting a permission, it’s a good practice to explain why you need it. This can be done using the shouldShowRequestPermissionRationale method.

if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
    // Explain to the user why you need the permission.

4. Handle Permission Results

Based on the user’s response to the permission request, you can handle the situation. If the permission is granted, proceed with the action; if denied, provide an alternative or request the permission again with a clear explanation.


Properly handling Android Runtime Permissions using the runtime model is crucial for user privacy and the security of your app. By requesting permissions at runtime, explaining why you need them, and handling permission results, you can create a more transparent and trustworthy user experience in your Android applications.

Remember that Android’s permissions and permission models may evolve over time, so it’s essential to stay updated with the latest best practices and Android documentation.

Leave a Comment