1.Dangerous Permissions
9组25个权限:申请组中任意一个权限对应组中的其他权限都默认被系统授权了(在次申请的时候)。
对于申请权限弹出的Dialog,是不能定制的。
group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS
group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL
group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR
group:android.permission-group.CAMERA
permission:android.permission.CAMERA
group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS
group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO
group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.READ_CELL_BROADCASTS
2. 6.0 代码动态申请
//1.在配置文件中 去声明要申请的权限,去申请没有声明的权限会造成程序崩溃 //2. 去检查是否申请权限了,申请了去执行业务逻辑,没有申请去申请,在回调中进行权限的再次判断与逻辑处理 //3. ContextCompat.checkSelfPermission()返回值有两个 PackageManager.PERMISSION_GRANTED(允许了) 和 PackageManager.PERMISSION_DENIED(拒绝了) //权限没有申请,就去申请权限去 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission.CALL_PHONE)) { // 当用户第一次拒绝了,这个分支在下次申请权限的时候,可以弹个dialog来提醒用户。 Toast.makeText(MainActivity.this,"申请吧,不要拒绝了!",Toast.LENGTH_SHORT).show(); } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, CALL_PERMISSION_REQUEST_CODE); } } else { //权限申请了,就去执行业务逻辑吧 callPhone(); }
/**
* 打电话
*/
public void callPhone() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + "13478493231"));
startActivity(intent);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//检查请求码,找到了对应申请权限的请求码 再去判断
switch (requestCode) {
case CALL_PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
callPhone();
} else {
Toast.makeText(MainActivity.this, "权限被拒绝了,就不能正常使用该应用了", Toast.LENGTH_SHORT).show();
}
break;
}
}