Android Tutorial

Software Setup and Configuration

Android Studio

File Structure

Components

Core Topics

Layout

View

Button

Intent and Intent Filters

Toast

RecyclerView

Fragments

Adapters

Other UI Component

Image Loading Libraries

Date and Time

Material Design

Bars

Working with Google Maps

Chart

Animation

Database

Advance Android

Jetpack

Architecture

App Publish

App Monetization

How to Request Permissions in Android Application?

Requesting permissions is an essential part of Android development since certain features or functionalities might require access to sensitive information or actions on the user's device. Starting from Android 6.0 (API level 23), users grant permissions to apps while the app is running, not when they install the app. This approach streamlines the app install process, since the user does not need to grant permissions when they install or update the app.

Here's how you can request permissions:

1. Declare the Permission in AndroidManifest.xml

Before requesting any permission, you need to declare them in your manifest file. For example:

<uses-permission android:name="android.permission.CAMERA" />

2. Check for Permission

Before accessing a feature that requires a permission, you should check if that permission has been granted:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
    != PackageManager.PERMISSION_GRANTED) {
    // Permission is not granted
}

3. Request the Permission

If the permission is not already granted, you can request it:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.CAMERA)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.CAMERA)) {
        // Show an explanation to the user asynchronously
        // After the user sees the explanation, try again to request the permission.
    } else {
        // No explanation needed; request the permission
        ActivityCompat.requestPermissions(thisActivity,
                arrayOf(Manifest.permission.CAMERA),
                MY_PERMISSIONS_REQUEST_CAMERA)
        // MY_PERMISSIONS_REQUEST_CAMERA is an app-defined int constant. 
        // The callback method gets the result of the request.
    }
}

4. Handle the Permission Request Response

After requesting the permission, you'll receive a callback reporting whether the permission was granted or not:

override fun onRequestPermissionsResult(requestCode: Int,
                                       permissions: Array<String>, grantResults: IntArray) {
    when (requestCode) {
        MY_PERMISSIONS_REQUEST_CAMERA -> {
            if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                // Permission was granted
                // You can now access the camera
            } else {
                // Permission denied
                // Disable the functionality that depends on this permission.
            }
            return
        }
        // Add other 'when' lines to check for other permissions your app might request.
        else -> {
            // Ignore all other requests.
        }
    }
}

Some Best Practices:

  • Explain why you need the permission: If the context isn't clear to the user, they might deny the permission. Use shouldShowRequestPermissionRationale() to determine if you should show an explanation to the user. If it returns true, show a brief message about why you need the permission.

  • Don't overwhelm the user: Request permissions in context and when they're needed, rather than all at once when the user first opens the app.

  • Handle denial gracefully: If a user denies a permission, ensure that your app still works. Provide alternatives or disable specific functionalities without crashing.

Remember, respecting user privacy and being transparent about your intentions will likely result in a better user experience and potentially a higher rate of permission acceptance.

  1. Requesting runtime permissions in Android:

    Use the following code to request runtime permissions in Android:

    // Check if the permission is not granted
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        // Request the permission
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQUEST_CODE);
    }
    

    Ensure you handle the result in the onRequestPermissionsResult method.

  2. Android permissions handling example:

    Here is a simple example of handling permissions in Android:

    // Check if the permission is not granted
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
        // Request the permission
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, CONTACTS_PERMISSION_REQUEST_CODE);
    } else {
        // Permission already granted, proceed with the task
        readContacts();
    }
    

    Handle the result in onRequestPermissionsResult.

  3. Granting permissions in Android application:

    Granting permissions is handled by the user through the permission request dialog. If the user grants permission, the app proceeds with the requested task; otherwise, it adapts based on the user's choice.

  4. Android permission request dialog code:

    The permission request dialog is automatically shown when you use ActivityCompat.requestPermissions. There's no need to manually create the dialog. Android handles this process for you.

  5. Android check and request permissions programmatically:

    Check and request permissions programmatically using the following:

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        // Permission not granted, request it
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_PERMISSION_REQUEST_CODE);
    } else {
        // Permission already granted, proceed with the task
        performStorageTask();
    }
    

    Handle the result in onRequestPermissionsResult.