我知道已经有人对此有一些疑问,但我会再问一次,因为它并没有真正帮助我。 我想用 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() 并获得存储权限吗?
我认为除了相机许可之外您不需要任何许可。为此,manifest.xml 将完成这项工作。 这是许可
<uses-permission android:name="android.permission.CAMERA" />
还有向启动器发送请求的代码。
private val requestCameraLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
if (it) {
takePhotoLauncher.launch(photoUri)
} else {
onBackClicked()
}
}
我希望它对你有用。