在安卓6.0之后有一些权限是要在运行的时候,当用到了该权限的时候,提示用户是否允许该权限,如果用户允许才开始使用该权限,如果用户拒绝,就使用不了相应的权限,那么问题来了,用户拒绝后,再次使用该功能,如何去检测是否拥有该权限呢,如检测出没有如何去设置呢?
检测是否注册了该权限
PackageManager pm = context.getPackageManager();
boolean flag = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.ACCESS_COARSE_LOCATION", "包名"));
if (flag)
{ //有这个权限,做相应处理
Toast.makeText(context, "有注册权限", 0).show();
return true;
}
else
{ //没有权限
Toast.makeText(context, "没有注册权限", 0).show();
return false;
}
这个是判断清单文件当中有没有申请该权限,如果有就返回true,如果没有就返回false
检测用户是否手动关闭或拒绝了相应的权限,该方法只能在安卓6.0及以上的系统上才能生效,以下的系统在安装的时候就已经允许了所有的权限,但是国产改造后的安卓系统在6.0以下在第一次运行的时候也会提示时候允许该权限,或者也可以手动的禁止该权限,对于改造后的6.0以下的系统,权限检测是不起重用的,除非使用相应厂商的API。
public boolean selfPermissionGranted(Context context,String permission) {
boolean result = true;
if (Build.VERSION.SDK_INT >= 23) {//Build.VERSION_CODES.M
if (1 >= 23) {
result = context.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
} else {
result = PermissionChecker.checkSelfPermission(context, permission)
== PermissionChecker.PERMISSION_GRANTED;
}
}
return result;
}
这个是在清单文件已经注册了,但是在6.0以后第一次运行的时候,系统提示是否允许该(定位)权限,如果用户点了否的话,定位功能就不起作用了,如果你的编译目标版本是6.0之前的不会出现报错现象,如果你的编译目标版本是6.0及之后,权限拒绝,在使用定位功能区地位就会报错,所以要去判断一下,地位权限是否被用户拒绝了,如果拒绝了,提示用户去打开相应的权限才能使用该功能。
那么如何用代码跳转到设置权限的页面呢,因为对于用户来说,大多数人肯定都是不知道怎么去设置,所有这些就留给程序员来提供一键跳转的功能
/**
* 跳转到该应用的设置应用详情界面,权限管理->去设置权限
*/
private void getAppDetailSettingIntent() {
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 9) {
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", getPackageName(), null));
} else if (Build.VERSION.SDK_INT <= 8) {
localIntent.setAction(Intent.ACTION_VIEW);
localIntent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());
}
startActivity(localIntent);
}
PermissionChecker类所在包下载:CSDN
Android中的各种访问权限Permission含义:http://www.cnblogs.com/shiwei-bai/p/4916794.html