• 现代android 动态权限,两种不同写法


     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]}没有授权")
                    }
                }
            }
    
        }
    }
    
  • 相关阅读:
    【每日一题】2216.美化数组的最少删除数-2023.11.21
    [论文必备]最强科研绘图分析工具Origin(1)——安装教程
    Java基础(二十五):JDBC
    单机高并发模型设计
    pikach靶场暴力破解
    【TIM定时器】
    Numpy中的四个小技巧
    六十九、Vue3
    如何打造一个属于自己的元宇宙电商-数字藏品NFG系统?
    【前端】CSS定位
  • 原文地址:https://blog.csdn.net/qq_30519365/article/details/141056461