第一行代码 第三版 第8章 ContentProvider 8.2 运行时权限

本文详细介绍了Android从6.0版本开始引入的运行时权限机制,旨在增强用户安全和隐私保护。主要内容包括Android权限的分类,如普通权限和危险权限,以及如何在程序运行时动态申请危险权限。示例代码展示了如何使用ContextCompat.checkSelfPermission()判断权限状态,以及如何通过ActivityCompat.requestPermissions()进行权限申请。
摘要由CSDN通过智能技术生成

8.2 运行时权限

Android6.0时引入的,为了更好地保护用户的安全和隐私。

8.2.1 Android 权限机制详解

Android中常用的权限分成了两类:普通权限和危险权限。(还有特殊权限,使用比较少)
危险权限必须由用户手动授权才可以,因为危险权限可能会触及用户隐私或者对设备安全性造成影响的权限。

8.2.2 在程序运行时申请权限

下面就是比较完整的 申请一个权限的代码:(连续同时申请几个权限,代码存在差异)。
第一步判断用户是否已经授权了 :ContextCompat.checkSelfPermission()方法,该方法有两个参数,context,第二个参数是具体的权限名;如:ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE);将这个方法的返回值和PackageManager.PERMISSION_GRANTED 比较:相等则表示用户已经授权了。
第二步若没有授权则进行权限申请 :调用ActivityCompat.requestPermissions()方法向用户申请权限。该方法有是三个参数:第一个参数:要求是Activity的实例;第二个参数是一个string数组;第三个参数是一个请求码,要保证该值是唯一的;如:ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CALL_PHONE),1)

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        makeCall.setOnClickListener {
		//第一步判断用户是否已经授权了            
            if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CALL_PHONE),1)
            }else{
                call()
            }
        }
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when(requestCode){
            1 ->{
                if(grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    call()
                }else{
                    Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT).show()
                }
            }
        }
    }

    private fun call(){
        try {
            val intent  = Intent(Intent.ACTION_CALL)
            intent.data = Uri.parse("tel:15181802534")
            startActivity(intent)
        }catch (e:SecurityException){
            e.printStackTrace()
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值