如何请求存储和相机权限并替换onRequestPermissionResult

问题描述 投票:0回答:1

我知道已经有人对此有一些疑问,但我会再问一次,因为它并没有真正帮助我。 我想用 Kotlin 编写条形码和 QRCode 扫描仪。为此,我需要用户的许可才能访问相机和存储,但程序不允许我获得权限。相机没问题,但存储有问题。 由于请求访问存储权限的方法随 SDK 版本而改变,我不知道如何为所有 Android 版本(>= Android 8.0)执行此操作。

最重要的是,Android studio 告诉我 onRequestPermissionsResult() 已被弃用,我无法用 registerForActivityResult() 替换它。

这是我的代码:

private fun checkStoragePermission(): Boolean {
        return (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED)
    }
    
private fun requestStoragePermission(){
        ActivityCompat.requestPermissions(this, storagePermissions, STORAGE_REQUEST_CODE)
    }

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

        when(requestCode) {
            CAMERA_REQUEST_CODE -> {
                //Check if some action from permission dialog performed or denied
                if (grantResults.isNotEmpty()) {
                    //Check if Camera and Storage permission is granted, contains boolean, true or false
                    val cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED
                    val storageAccepted = grantResults[1] == PackageManager.PERMISSION_GRANTED
                    //Check if both permissions granted or not
                    if (cameraAccepted && storageAccepted) {
                        //both permissions(Gallery/Camera) are granted, we can launch camera for intent
                        pickImageCamera()
                    } else {
                        //one or both permissions denied, can't launch camera intent
                        showToast("Permission for Camera and Storage is required")
                        //ask for camera and storage permission
                        requestCameraPermission()
                        requestStoragePermission()
                    }
                }
            }

            STORAGE_REQUEST_CODE -> {
                //check if storage permission is granted or not
                if (grantResults.isNotEmpty()) {
                    //Check if storage permission is granted, contains boolean result, either true or false
                    val storageAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED
                    //Check if storage permission is granted or not
                    if (storageAccepted) {

                        //Storage Permission granted, launch Gallery
                        pickImageGallery()
                    } else {
                        //storage permission denied, cant launch gallery
                        showToast("Permission for Storage is needed")
                        //ask for permission to external storage
                        requestStoragePermission()
                    }
                }
            }
        }
    }

任何人都可以帮我替换 onRequestPermissionsResult() 并获得存储权限吗?

android kotlin android-permissions deprecated
1个回答
0
投票

我认为除了相机许可之外您不需要任何许可。为此,manifest.xml 将完成这项工作。 这是许可

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

还有向启动器发送请求的代码。

private val requestCameraLauncher =
    registerForActivityResult(ActivityResultContracts.RequestPermission()) {
        if (it) {
            takePhotoLauncher.launch(photoUri)
        } else {
            onBackClicked()
        }
    }

我希望它对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.