val permissions = arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_NOTIFICATION_POLICY
)
if (!hasQx(permissions)) {
ActivityCompat.requestPermissions(this, permissions, 400)
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 300) {
if (grantResults.size == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
println("申请成功")
} else {
//申请失败
println("申请失败")
}
} else if (requestCode == 400) {
for (i: Int in permissions.indices) {
if (ActivityCompat.checkSelfPermission(
this,
permissions[i]
) == PackageManager.PERMISSION_GRANTED
) {
println("${permissions[i]}已经授权")
} else {
println("${permissions[i]}没有授权")
}
}
}
}
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
) {
requestPermission.launch(Manifest.permission.READ_EXTERNAL_STORAGE)
}
}
private var requestPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted ->
run {
if (isGranted) {
println("权限授予")
} else {
println("权限bu授予")
}
}
}
详细案例:
package com.linghang.hf
import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.View
import android.view.View.OnClickListener
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import com.linghang.hf.databinding.ActivityTestBinding
class TestDemo : AppCompatActivity(), OnClickListener {
private lateinit var inflate: ActivityTestBinding
private var requestPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted ->
run {
if (isGranted) {
println("权限授予")
} else {
println("权限bu授予")
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
inflate = ActivityTestBinding.inflate(layoutInflater)
setContentView(inflate.root)
inflate.btnOpen1.setOnClickListener(this)
inflate.btnOpen2.setOnClickListener(this)
inflate.btnOpen3.setOnClickListener(this)
}
override fun onClick(v: View?) {
val btnOpen1 = inflate.btnOpen1
val btn2 = inflate.btnOpen2
val btn3 = inflate.btnOpen3
when (v) {
btnOpen1 -> {
checkRead()
}
btn2 -> {
println("vvv")
checkMore()
}
btn3 -> {
check2()
}
}
}
private fun check2() {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
) {
requestPermission.launch(Manifest.permission.READ_EXTERNAL_STORAGE)
}
}
private fun checkMore() {
val permissions = arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_NOTIFICATION_POLICY
)
if (!hasQx(permissions)) {
ActivityCompat.requestPermissions(this, permissions, 400)
}
}
private fun hasQx(permissions: Array<String>): Boolean {
for (p: String in permissions) {
if (ActivityCompat.checkSelfPermission(this, p) != PackageManager.PERMISSION_GRANTED) {
return false
}
}
return true
}
private fun checkRead() {
if (ActivityCompat.checkSelfPermission(
this@TestDemo,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
) {
//已经拥有权限
println("已经拥有权限")
} else {
println(
"fff" + ActivityCompat.shouldShowRequestPermissionRationale(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
)
)
if (ActivityCompat.shouldShowRequestPermissionRationale(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
)
) {
//权限拒绝了还可以去申请
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), 300
)
} else {
//没有权限去申请
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
300
)
}
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 300) {
if (grantResults.size == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
println("申请成功")
} else {
//申请失败
println("申请失败")
}
} else if (requestCode == 400) {
for (i: Int in permissions.indices) {
if (ActivityCompat.checkSelfPermission(
this,
permissions[i]
) == PackageManager.PERMISSION_GRANTED
) {
println("${permissions[i]}已经授权")
} else {
println("${permissions[i]}没有授权")
}
}
}
}
}