android 6.0以后增强了权限管理,如果想要和以前一样的话,可以把目标版本设置为23以下,这样的可以默认获取权限;下面主要是简单介绍下运行时权限问题的解决。
运行时权限开发应用
Android6.0对权限进行了分类,分为:
1. Normal Premission:普通权限
2. Dangerous Permission/Group:危险权限/组
*危险权限分组:比如当用户授予应用读sdk权限,则该应用同时拥有写的权限,而不会再次询问用户*
新增API
ContextCompact.checkSelfPermission()检测是否拥有权限
ActivityCompact.requestPermission()申请授权
onRequestPermissionsResult()用户是否授权
ActivityCompat.shouldShowRequestPermissionRationale()权限解释(用户拒绝后出现)
使用流程:
在manifest清单文件中添加权限(适配6.0以下)
检查权限(危险)
申请授权
1.判断版本是否是23及以上
public static booleanneedRequestPermission() {
returnBuild.VERSION.SDK_INT>=23;
}
2.检测权限是否获取:
ContextCompat.checkSelfPermission(context, permission) !=PackageManager.PERMISSION_GRANTED
如果为ture 则需要申请权限,如果为false 则可以直接执行
3.申请权限:
第一个参数: 上下文
第二个参数:需要申请的权限
第三个参数:请求码
ActivityCompat.requestPermissions(context,newString[]{Manifest.permission.CALL_PHONE},1);
4.申请的回调
@Override
public voidonRequestPermissionsResult(intrequestCode,@NonNullString[] permissions,@NonNullint[] grantResults) {
}
根据请求码判断是请求的哪个权限,然后重新判断权限是否获取,根据获取结果执行操作;如果没有权限不能使用应用的话,则可以重新申请对应的权限,否则关闭app
推荐使用的第三方:
//运行时权限AndPermission依赖库
compile'com.yanzhenjie:permission:1.0.4'
可以查看:链接
网友评论