版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37292229/article/details/72358136
Google I/O 2015大会如约已于2015年5月28日举行。在发布会上代号为“Marshmallow(棉花糖)”的安卓6.0系统正式推出。
Android 6.0进一步强化应用权限管理,应用权限管理也成为系统级的功能。比如应用使用位置、相机、通信录需要提示用户允许使用这些权限。
Android 6.0系统默认targetSdkVersion版本小于23的应用授予所有的申请权限,所以如果app设置的targetSdkVersion小于23,不需要设置运行时权限。
/**
* 打电话,之前先检测是否开启CALL_PHONE权限,如果开启,直接调用打电话功能;
* 没有开启,需要提示用户开启权限
*/
private void callPhone() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, PERMISSIONS_REQUEST_CALL_PHONE);
} else {
call();
}
}
@SuppressLint("MissingPermission")
private void call() {
Intent intent = new Intent(Intent.ACTION_CALL);
Uri data = Uri.parse("tel:" + "10086");
intent.setData(data);
startActivity(intent);
}
弹框提示用户开启权限,点击拒绝或者同意,会回调onRequestPermissionsResult方法。
第一次我们拒绝了,下次会有不在询问的选项,如果用户选择了不再询问,那么
shouldShowRequestPermissionRationale方法会返回false。那么我们用户一直拒绝使用权限,则功能不能使用。我们需要显示一个dialog,提示用户开启权限。所
/**
*弹框提示用户开启权限,点击拒绝或者同意,会回调onRequestPermissionsResult方法。
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSIONS_REQUEST_CALL_PHONE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
call();
} else {
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setMessage("请开启播打电话权限")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
dialog.show();
}
Toast.makeText(CallPhoneActivity.this, "权限被拒绝", Toast.LENGTH_SHORT).show();
}
}
}