0
0
Android Kotlinmobile~20 mins

Permission request flow in Android Kotlin - Mini App: Build & Ship

Choose your learning style9 modes available
Build: PermissionRequestScreen
This screen asks the user for camera permission and shows the permission status.
Target UI
-------------------------
| Permission Request    |
|-----------------------|
| Camera permission is  |
| needed to take photos.|
|                       |
| [Request Permission]  |
|                       |
| Status: Unknown       |
-------------------------
Show a button labeled 'Request Permission'.
When tapped, request CAMERA permission from the user.
Display the current permission status below the button: 'Granted', 'Denied', or 'Unknown'.
Handle the permission result properly.
Use modern Android Kotlin APIs for permission handling.
Starter Code
Android Kotlin
package com.example.permissionapp

import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import android.widget.Button
import android.widget.TextView

class PermissionRequestScreen : AppCompatActivity() {
    private lateinit var statusTextView: TextView
    private lateinit var requestButton: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_permission_request_screen)

        statusTextView = findViewById(R.id.statusTextView)
        requestButton = findViewById(R.id.requestButton)

        // TODO: Add permission request logic here
    }
}
Task 1
Task 2
Task 3
Task 4
Solution
Android Kotlin
package com.example.permissionapp

import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import android.widget.Button
import android.widget.TextView

class PermissionRequestScreen : AppCompatActivity() {
    private lateinit var statusTextView: TextView
    private lateinit var requestButton: Button

    private val requestPermissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { isGranted: Boolean ->
        if (isGranted) {
            statusTextView.text = "Status: Granted"
        } else {
            statusTextView.text = "Status: Denied"
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_permission_request_screen)

        statusTextView = findViewById(R.id.statusTextView)
        requestButton = findViewById(R.id.requestButton)

        updatePermissionStatus()

        requestButton.setOnClickListener {
            requestPermissionLauncher.launch(Manifest.permission.CAMERA)
        }
    }

    private fun updatePermissionStatus() {
        val permissionStatus = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
        statusTextView.text = when (permissionStatus) {
            PackageManager.PERMISSION_GRANTED -> "Status: Granted"
            PackageManager.PERMISSION_DENIED -> "Status: Denied"
            else -> "Status: Unknown"
        }
    }
}

This solution uses registerForActivityResult with RequestPermission to request the camera permission in a modern, recommended way.

We check the current permission status on screen creation and update the status text accordingly.

When the user taps the button, the permission request dialog appears. The result updates the status text to show if permission was granted or denied.

This approach avoids deprecated methods and handles permission flow cleanly.

Final Result
Completed Screen
-------------------------
| Permission Request    |
|-----------------------|
| Camera permission is  |
| needed to take photos.|
|                       |
| [Request Permission]  |
|                       |
| Status: Granted       |
-------------------------
User taps 'Request Permission' button.
System shows permission dialog asking for camera access.
User grants or denies permission.
Status text updates to 'Status: Granted' or 'Status: Denied' accordingly.
Stretch Goal
Add a rationale dialog that explains why the app needs camera permission before requesting it.
💡 Hint
Use shouldShowRequestPermissionRationale to check if rationale is needed and show an AlertDialog before launching the permission request.