基本原理
- 权限在使用时,向android系统请求
- android系统会弹出对话框,将决定权交给用户。
- 用户的决定将会以回调函数的形式交给activity
- 在回调函数中,根据不同的决定结果,选择执行不同的操作
分解:
- 在某一事件处理中,检查是否具有某项权限:
//使用ContextWrapper的checkSelfPermission方法
if(checkSelfPermission(Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){}
//使用CContextCompat的checkSelfPermission方法
if(ContextCompat.checkSelfPermission(this,Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED)
- 不具备权限时,进行权限申请:
if(checkSelfPermission(Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.CALL_PHONE},1);
}
注意:
(1)前提条件,必须在清单文件中对权限进行申请
<uses-permission android:name="android.permission.CALL_PHONE"/>
此时,用户会得到通知:
(2)requestPermissions()是异步方法,所以程序会正常向下执行!
- 回调处理:
在activity中:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1:
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
//得到了用户的允许
}
else{
//用户拒绝
}
}
}