Android权限小讲

1 背景

基于android系统的权限管理方式越来越完善, 在android6.0(api23)开始, 用户开始再应用运行时授予权限,而不是在应用安装是授予。
android是一个权限分割的操作系统, 每个应用都运行在分隔的安全沙箱中, 如果需要该应用访问系统的沙箱数据操作, 首先需要获取到该应用的接口访问权限。


须知
  • 如果应用一味的要求用户授予权限, 可能会让用户感到无所适从, 极有可能会不使用您的应用, 甚至会采用措施直接卸载掉。
  • android对权限进行了分组, 大致分为 正常权限和危险权限, 详情可点击阅读。
权限等级

正常权限不会给用户隐私带来风险,在应用的清单文件中声明使用, 如果声明该应用即可被直接赋予权限使用。
危险权限会授予应用访问用户机密数据的权限。 危险权限在清单文件声明之后, 才有资格在运行时动态的向用户申请。

系统处理权限的差异性
  • 如果你的应用运行在Android5.1或更低版本, 或者运行在SDK 22或更低, 所有权限需要在文件中声明, 安装应用时需要用户明确的授予权限; 如果用户没有授予, 那么根本就不会安装应用。

  • 如果你的应用运行在Android6.0或更高版本, 或者运行在SDK 23或更高, 所有权限需要在文件中声明, 在应用运行时, 需要用户明确的授予该危险权限; 如果用户没有给予该权限, 那么应用仍然可以继续运行除此权限外其余的功能。

检查权限

  • 支持android6.0及以上

    要检查您的应用是否具备该项权限, 可调用ContextCompat.checkSelfPermission()方法。 例如, 以下示例代表是否具有读取短信功能。
    int state = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS);
    方法将会返回PackageManager.PERMISSION_GRANTED, PackageManager.PERMISSION_DENIED

如果应用已经具备该权限,则会返回PERMISSION_GRANTED, 如果当前并不具备该权限则返回PERMISSION_DENIED


请求权限

应用可在开发中在清单文件中声明所需要的清单文件, 但是需要用户明确告诉系统该应用是否能够具备, 调用系统的请求权限方法可以显示一个弹出框提供给用户进行选择(这个弹出框开发者不能对他进行自定义)

开发者可以直接在Activity中调用requestPermissions()方法请求所需权限,请求方法会在异步执行, 并能够通过重写onActivityResult方法来得知权限是否被用户授予。
以下代码可以检查应用是否具备读取用户短信的权限,并根据需要请求该权限:

final int PERMISSION_RESULT = 100;
if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, PERMISSION_RESULT);
        }

处理权限请求响应

当用户已对当前请求作出响应时,系统会通过onRequestPermissionsResult方法返回请求结果

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == PERMISSION_RESULT){
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 用户响应成功授予
            } else{
                // 用户响应禁止采用该权限
            }
        }
    }

如果希望能够更加深入了解android的权限机制, 可参考文档.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 权限监控是指对Android应用程序的权限使用情况进行监控和管理。Android系统通过权限机制来限制应用程序对系统资源和用户数据的访问。权限监控的目的是确保应用程序只能访问其所需的权限,并防止恶意应用程序滥用权限。 在Android中,权限分为两种类型:常规权限和危险权限。常规权限是指不涉及敏感信息和系统资源的权限,应用程序可以在安装时自动获得。而危险权限是指涉及敏感信息和系统资源的权限,需要在运行时向用户申请并获得用户的授权才能使用。 Android提供了一些机制来监控应用程序的权限使用情况。其中包括: 1. 权限申请和授权:应用程序在运行时需要使用危险权限时,会向用户展示权限请求对话框,用户可以选择授权或拒绝。开发者可以通过监听权限请求结果来监控用户的授权行为。 2. 权限检查:应用程序可以使用`checkSelfPermission()`方法来检查是否被授予了某个权限。 3. 权限管理界面:Android系统提供了一个权限管理界面,用户可以在此界面中查看和管理应用程序的权限使用情况。 除了Android系统提供的机制外,开发者还可以通过自定义代码来实现更精细的权限监控。例如,可以使用`PackageManager`类来获取应用程序的权限列表,然后对比应用程序实际使用的权限进行监控。 总而言之,Android权限监控是通过系统提供的机制和开发者自定义代码来确保应用程序只能访问其所需权限,并防止恶意应用程序滥用权限的一种方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值