权限检测

在安卓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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值