1、权限
- 普通权限:不会直接威胁到用户安全和隐私的权限
- 危险权限:那些可能会触及用户隐私或者对设备安全性造成影响的权限。
到Android 10 系统为止所以的危险权限
2、在程序运行时申请权限
- 普通权限申请:系统会自动帮我们进行授权,不需要用户手动操作。
- 危险权限申请:在Android6.0及以上系统在使用时必须进行运行时权限处理。
危险权限申请步骤
(1)判断用户是否给我们授权了。
checkSelfPermission()方法,第一个参数是Context,第二个参数是具体的权限名,然后我们使用方法的返回值和PackageManager.PERMISSION_GRANTED作比较。相等就说明用户已经授权,我们直接执行拨打电话的操作进行。不等就说明用户没有授权,则需要调用ActivityCompat.requestPermissions()方法向用户申请权限。requestPermissions()方法有三个参数,第一个参数要求是Activity的实例,第二个参数是一个String数组,把要申请的权限名放入数组中,第三个参数是唯一的请求码。
if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CALL_PHONE),1)
}
else{
call()
}
(2)用户已经授权,我们直接执行拨打电话的操作。
private fun call(){
try {
val intent=Intent(Intent.ACTION_CALL)
intent.data= Uri.parse("tel:10086")
startActivity(intent)
}catch (e:SecurityException){
e.printStackTrace()
}
}
(3)用户没有授权,调用ActivityCompat.requestPermissions()方法之后,系统会弹出一个权限申请的对话框,用户可以选择接受或者拒绝申请,最后回调到onRequestPermissionsResult()方法·。
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()
}
}
}
}
到此这篇关于Android权限机制深入分析讲解的文章就介绍到这了,更多相关Android权限机制内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!