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()
}
}
}
}
?
|