Andorid 6.0 运行时权限
1.Android 6.0 运行时权限新增 API
// 检查某个权限是否授权
ContextCompat.checkSelfPermission(Context context, String permission);
// 申请一个或多个权限
ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode);
// 是否显示请求权限的说明
ActivityCompat.shouldShowRequestPermissionRationale(Activity activity, String permission);
处理权限结果
@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){
switch(permsRequestCode){
case REQUEST_XX_PERMISSION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//授权成功
} else {
//授权拒绝
}
break;
}
}
2.Android 6.0 运行时权限处理
(1)在AndroidManifest文件中添加需要的权限(我们假设权限xx);
<uses-permission android:name="android.permission.xx" />
(2)在Java代码中进行动态授权:
private static final int REQUEST_XX_PERMISSION=10;
/**
* 这个方法在需要进行授权的地方调用
*/
private void requestXxPermission(){
//判断系统版本
if (Build.VERSION.SDK_INT >= 23) {
//检测当前app是否拥有某个权限
int checkCallPhonePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.xx);
//判断这个权限是否已经授权过
if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
//判断是否需要 向用户解释,为什么要申请该权限,该方法只有在用户在上一次已经拒绝过你的这个权限申请才会调用。
if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.xx))
Toast.makeText(this,"Need xx permission.",Toast.LENGTH_SHORT).show();
/**
* 参数1 Context
* 参数2 需要申请权限的字符串数组,支持一次性申请多个权限,对话框逐一询问
* 参数3 requestCode 主要用于回调的时候检测
*/
ActivityCompat.requestPermissions(this ,new String[]{Manifest.permission.xx},REQUEST_BLUETOOTH_PERMISSION);
return;
}else{
}
} else {
}
}
(3)授权回调处理
@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){
switch(permsRequestCode){
case REQUEST_XX_PERMISSION:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//授权成功
} else {
//授权拒绝
}
break;
}
}
对于权限的申请结果,首先验证requestCode定位到你的申请,然后验证grantResults对应于申请的结果,这里的数组对应于申请时的第二个权限字符串数组。如果你同时申请两个权限,那么grantResults的length就为2,分别记录你两个权限的申请结果。如果申请成功,就可以做你的事情了。
[Google官方权限文档](https://developer.android.google.cn/guide/topics/security/permissions.html#perm-groups)