free geoip
31

How to Solve Permission Denied Error in Kotlin

If your Kotlin Android app is not asking for runtime permissions, you’re not alone. This is a common issue especially…

If your Kotlin Android app is not asking for runtime permissions, you’re not alone. This is a common issue especially for apps targeting Android 6.0 (API 23) and above, where runtime permissions are required for sensitive features like Camera, Location, Storage, and more.

Kotlin app not asking for permissions

This guide explains why your Kotlin app fails to ask for permissions and how to implement a correct runtime permission request using best practices in 2025.

Common Causes

  • Missing permission in AndroidManifest.xml
  • Not requesting runtime permissions in code
  • Target SDK version too low
  • Ignoring ActivityCompat.shouldShowRequestPermissionRationale

Complete Kotlin Code Solution

Below is a complete working Kotlin example with separate classes. This code demonstrates how to request and handle permissions properly.

AndroidManifest.xml

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

MainActivity.kt

import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {

    private val REQUEST_CODE_PERMISSIONS = 101
    private val REQUIRED_PERMISSIONS = arrayOf(
        Manifest.permission.CAMERA,
        Manifest.permission.READ_EXTERNAL_STORAGE
    )

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

        if (!hasPermissions()) {
            requestPermissions()
        } else {
            proceedWithAppLogic()
        }
    }

    private fun hasPermissions(): Boolean {
        return REQUIRED_PERMISSIONS.all {
            ContextCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED
        }
    }

    private fun requestPermissions() {
        ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS)
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        if (requestCode == REQUEST_CODE_PERMISSIONS) {
            if (grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
                Toast.makeText(this, "Permissions granted", Toast.LENGTH_SHORT).show()
                proceedWithAppLogic()
            } else {
                Toast.makeText(this, "Permissions denied", Toast.LENGTH_LONG).show()
            }
        }
    }

    private fun proceedWithAppLogic() {
        // Your app logic here
    }
}

Related Resource

Read more about Android runtime permissions guide from the official documentation.

Extra Tips

  • Always request permissions before accessing protected features.
  • Consider adding a custom dialog before system permission dialog for better UX.
  • Check shouldShowRequestPermissionRationale() for denied permissions.

rysasahrial

Leave a Reply

Your email address will not be published. Required fields are marked *