kotlin中的权限请求问题(Storage Permission)



我正在尝试使用kotlin请求android权限,当我请求权限,然后权限显示,但我已经创建了一个不工作的功能。功能像用户请求权限1次,然后权限显示第二次,但拒绝第二次后,对话框显示,但我的功能没有。

请检查我的代码

package com.`fun`.rapidplayer
import android.app.Dialog
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.view.Window
import android.widget.Button
import android.widget.LinearLayout
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat

class PermissionActivity : AppCompatActivity() {
private lateinit var requestPermissionLauncher: ActivityResultLauncher<String>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_permission)
requestPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
//Storage Permission Granted
intent.setClass(applicationContext, MainActivity::class.java)
startActivity(intent)
finish()
} else {
//Storage Permission NOT Granted

showDialog()
}
}

val allow = findViewById<Button>(R.id.Allow_Btn)
allow.setOnClickListener {
requestStoragePermission()
}
}
private fun requestStoragePermission(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
when {
ContextCompat.checkSelfPermission(
this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED -> {
intent.setClass(applicationContext, MainActivity::class.java)
startActivity(intent)
finish()
}
shouldShowRequestPermissionRationale(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) -> {
// This case means user previously denied the permission
showDialog()
}
else -> {
// request the permission
requestPermissionLauncher.launch(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
}
}
}
override fun onResume() {
super.onResume()
if (ContextCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
intent.setClass(applicationContext, MainActivity::class.java)
startActivity(intent)
finish()
}
}
private fun showDialog() {
val dialog = Dialog(this)
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
dialog.setCancelable(false)
dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
dialog.setContentView(R.layout.permission_denied)
dialog.findViewById(R.id.root) as LinearLayout
val opensettigs = dialog.findViewById(R.id.open_settings) as Button
opensettigs.setOnClickListener {
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
val uri: Uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivity(intent)
}
dialog.show()
}
}

show please check out my code and give best solution please

我认为when子句中的这一节没有对任何东西进行比较:

shouldShowRequestPermissionRationale(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) -> {
// This case means user previously denied the permission
showDialog()
}

在前面的子句中,您正在与PackageManager进行比较。PERMISSION_GRANTED

希望有帮助!

最新更新