Android Request Permission (READ_EXTERNAL_STORAGE)

Edit AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>

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

    ...
</manifest>

Activity

class TestPermissionFragment : Fragment() {    companion object {        fun newInstance() = TestPermissionFragment()        private const val REQUEST_STORAGE_PERMISSION = 1    }    override fun onCreateView(        inflater: LayoutInflater, container: ViewGroup?,        savedInstanceState: Bundle?    ): View? {        return inflater.inflate(R.layout.test_permission, container, false)    }    override fun onActivityCreated(savedInstanceState: Bundle?) {        super.onActivityCreated(savedInstanceState)        testButton.setOnClickListener {            if (hasStoragePermission()) {                findAlbumsInPhotoGallery(context!!.contentResolver)            }            else {                requestStoragePermission()            }        }        startActivity(GalleryActivity.newInstance(context!!))    }    override fun onRequestPermissionsResult(        requestCode: Int,        permissions: Array<out String>,        grantResults: IntArray    ) {        // super.onRequestPermissionsResult(requestCode, permissions, grantResults)        when(requestCode) {            REQUEST_STORAGE_PERMISSION -> {                if (grantResults.isNotEmpty() && grantResults[0] == PERMISSION_GRANTED) {                    findAlbumsInPhotoGallery(context!!.contentResolver)                }                else {                    val showRational =                        ActivityCompat.shouldShowRequestPermissionRationale(                            activity!!,                            Manifest.permission.READ_EXTERNAL_STORAGE                        )                    if (showRational) {                        Timber.d("Storage permission denied")                    }                    else {                        Intent(ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:${activity!!.packageName}")).apply {                            addCategory(Intent.CATEGORY_DEFAULT)                            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)                        }.also { intent ->                            startActivity(intent)                        }                    }                }            }        }    }    private fun hasStoragePermission() = ContextCompat.checkSelfPermission(        context!!,        Manifest.permission.READ_EXTERNAL_STORAGE    ) == PERMISSION_GRANTED    private fun requestStoragePermission() {        if (!hasStoragePermission()) {            val permissions = arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)            ActivityCompat.requestPermissions(activity!!, permissions, REQUEST_STORAGE_PERMISSION)        }    }    private fun findAlbumsInPhotoGallery(contentResolver: ContentResolver) {        // run code which require READ_EXTERNAL_STORAGE permission    }}

❤️ Is this article helpful?

Buy me a coffee ☕ or support my work via PayPal to keep this space 🖖 and ad-free.

Do send some 💖 to @d_luaz or share this article.

✨ By Desmond Lua

A dream boy who enjoys making apps, travelling and making youtube videos. Follow me on @d_luaz

👶 Apps I built

Travelopy - discover travel places in Malaysia, Singapore, Taiwan, Japan.