android权限do|android权限do you know

android6.0增加运行时权限申请

  • 6.0之前应用所需权限需要在开发应用中mainifest中申请,当程序没有获取到申请的应用权限则无法安装应用程序,6.0以后可以在程序运行时,需要权限时进行申请获取。
  • 并不是所有的权限都需要运行时申请,android系统定义了两种权限:普通权限、危险权限,普通权限只需要在mainifest文件中定义即可,而危险权限需要运行时申请,如果不进行申请则会抛异常导致程序crash
  • 危险权限
    • 一共九组24个权限
    权限组 权限名
    CALENDAR READ_CALENDAR
    WRITE_CALENDAR
    CAMERA CAMERA
    CONTACTS READ_CONTACTS
    WRITE_CONTACT
    GET_ACOUNTS
    LOCATION ACCESS_FINE_LOCATION
    ACCESS_COARSE_LOCATION
    MECROPHONE RECORD_RADIO
    SMS SEND_SMS
    RECEIVE_SMS
    READ_SMS
    RECEIVE_MMS
    RECEIVE_WAP_PUSH
    STORYGE READE_EXTERNAL_STORAGE
    WRITE_EXTERNAL_STORAGE
    PHONE READE_PHONE_STATE
    CALL_PHONE
    READE_CALL_LOG
    WRITE_CALL_LOG
    ADD_VOICEMAIL
    USE_SIP
    PROCESS_OUTGOING_CALLS
    • 一旦权限名被用户授权,则该权限组内所有的权限将都被授权
  • 普通权限
    • 除了危险权限外都是普通权限
  • 权限申请代码(读取通讯录为例)
    • 在开发中,通常对应用的运行环境进行判断,是否需要申请权限
    • 申请权限
private void requestReadPhonePermission() {
final Activity activity = getActivity();
if (Build.VERSION.SDK_INT >= 23) {
if (activity != null) {
// 检查是否已有权限
if (activity.checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager
.PERMISSION_GRANTED) {
// 之前点击了"拒绝后不再询问”,无法再次弹出权限申请框,此判断在部分系统中会出现无法判断情况
// 去设置界面设置权限
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,
(Manifest.permission.READ_CONTACTS))) {
gotoSetPage(activity); // 此种情况判定为无法弹出申请权限系统弹窗,则直接进入系统设置界面逻辑
});
} else {
// 如果没有权限并且没勾选“不再询问”,向用户发起权限请求
activity.requestPermissions(
new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_PHONE_BOOK_CODE);
}
} else {
gotoPhoneBookPage(activity);
}
}
} else {
gotoPhoneBookPage(activity);
}
}
  • 申请回调
    • 重写activity的onRequestPermissionsResult方法
【android权限do|android权限do you know】switch (requestCode) {
case REQUEST_PHONE_BOOK_CODE: {
if (grantResults == null || grantResults.length == 0) {
return;
}
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被用户同意
Activity activity = TaskManagerFactory.getTaskManager().getContainerActivity();
gotoPhoneBookPage(activity);
} else {
ToastForCarpool.show("请开启通讯录权限");
}
break;
}
default:
break;
}

    推荐阅读