Android 6.0前后的权限系统介绍、使用、建议

本文介绍了Android 6.0前后权限系统的差异,包括权限的作用、分类,以及如何在Android 6.0后按需请求权限。强调了6.0后用户可动态管理权限,建议开发者注意权限申请的用户体验和必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 
 

Android 6.0前后的权限系统介绍、使用、建议

前言(以后前言部分属于我家领导的!)

  • 今日金句:如果爱请深爱~

核心内容

  • 为什么需要权限,权限的能做什么,怎么做
  • Android权限系统分类
  • Android6.0之前的系统权限介绍
  • Android6.0之后的系统权限介绍
  • Android6.0之后系统权限直接与间接使用
  • Android6.0之后系统权限使用建议

具体描述

  1. 为什么需要权限,权限的能做什么,怎么做
    • 权限是Android系统保护用户利益的一种机制,权限在什么时候发挥作用呢,我们都知道Android的每一应用都是独立的运行在自己的sandbox(沙盒)里,sandbox之间通信是需要满足一定条件的,而权限就是这些条件的一部分,通俗点说:一般常用的情况就是当用户需要访问非当前操作应用内容的时,需要其他应用(一般是系统)授予的一种可操作需要操作其他应用的权力,类似于自己的app读取手机通讯录。
    • 不同的权限对应不同的操作许可
    • 怎么做,因为Android 6.0前后的做法不太一致,我们先补补基础知识,不要着急,在文章最后给出答案,会敲代码不神奇,懂原理才能走得更远。。。
  2. Android权限系统分类
    • 大体可分为两类:普通权限和危险权限;
    • 普通权限:指的是对其他应用的数据和资源影响在Android系统看来无害的操作所需要的“权力”,被规定为普通权限,具体可以查看官方文档,普通权限一般是系统自动授权的不需要用户参与。
    • 危险权限:顾名思义,就是跟普通权限相对立的,指的是对其他应用有害的,可能造成侵犯用户隐私或者敏感数据泄漏的操作权力,这种权利必须经由用户同意,app才有进一步操作的可能,这也就是长跟身边小伙伴说的公共wifi不要主动去链接的道理是一样的。
  3. Android6.0之前的系统权限介绍
    • 这里所说的Android6.0之前,指的是app所安装的手机Android系统版本低于6.0,或者开发者设置的targetSDKVersion小于等于22的Android手机应用。在这样手机上申请权限,会在安装应用的同时,一次性的询问用户使用该app所需要的全部“危险”权限,如果用户不同意其中某些权限,则是无法进行安装操作的。感觉有点霸王条款的样子,但是事实就是这样。。。
  4. Android6.0之后的系统权限介绍 -Android 6.0对权限系统做了升级,做的更人性化,应用可以在需要某项“危险”权限的时候,向用户发出权限请求,用户在此过程中可以选择同意或者不同意,这样用户体验提升了,那么开发者就需要做很多优化的操作,比如权限的检查,权限的请求后根据用户操作保证app都能正常运行,但那也比用户用着不爽直接卸载你的应用要好吧,当然,针对权限请求的其中还有很多细节值得我们探讨,这个将在下面给出官方的建议。
  5. Android6.0之后系统权限直接与间接使用
    • 无论是6.0之前还是之后都需要在我们的 Manifest.xml文件中配置我们需要的权限,这样做相当于对权限的声明,6.0的时候会对这些声明做进一步的申请确认,在程序需运行时实时的提醒当前需要什么权限,方便用户实时保护自己的数据和隐私。
    • 权限的申请使用分为直接和简介两种,一种是通过下面代码里面写的那样,直接强行申请,这样我们会拿到这个权限允许的所有控制权,但通常需要我们自己处理UI的部分,另一种,则是通过意图的方式调用其他应用,这些应用自带了申请权限的操作,我们可以借用这类应用的UI完成我们想要的操作,例如,读取通讯录内容和调用通讯录操作一样。前者是获得所有权,后者是通过调用系统的应用达到读取的目的。
    • 运行时申请权限处理(例子引用了官方代码),值得一提的是在该代码中,先判断了是否已经获取了读取通讯录的权限,然后根据情况判断是否需要在正式申请权限之前,向用户给出友好的提示。

申请
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
        Manifest.permission.READ_CONTACTS)) {

    // Show an expanation to the user *asynchronously* -- don't block
    // this thread waiting for the user's response! After the user
    // sees the explanation, try again to request the permission.

} else {

    // No explanation needed, we can request the permission.

    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
    // app-defined int constant. The callback method gets the
    // result of the request.
}
}

应答
@Override
public void onRequestPermissionsResult(int requestCode,
    String permissions[], int[] grantResults) {
switch (requestCode) {
    case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
        // If request is cancelled, the result arrays are empty.
        if (grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            // permission was granted, yay! Do the
            // contacts-related task you need to do.

        } else {

            // permission denied, boo! Disable the
            // functionality that depends on this permission.
        }
        return;
    }

    // other 'case' lines to check for other
    // permissions this app might request
}
}

  1. Android6.0之后系统权限使用建议
    • 不要频繁的向用户发送权限申请
    • 如果申请的权限非本应用必要组件成分,可考虑用意图代替
    • 6.0之后甚至6.0之前用户可以随时在设置中心关闭用户已经申请过的权限,所以要做好权限是否已申请的判断,保证app能够正常运行
    • 在合适的时候做合适的事
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值