android permission——关于权限你需要知道的事
Posted David-Kuper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android permission——关于权限你需要知道的事相关的知识,希望对你有一定的参考价值。
引言
有时候我们使用权限的时候,会发现同属于一个权限组的权限的请求描述符都是一样的。而且当你同意了改组中某一个权限的时候,同组内其他权限就不会再次提示了,默认同意。同理,我们自定义权限的时候,也可以按照这样的方式,将一些同类的权限放在一个组中,用户授权是以组的形式,他们并不能看到具体权限的细节,这样可以在避免用户进行多次许可的坏体验,程序编写也更加方便。
一 权限分类
按照权限来源分类:
- 系统原有权限 :
这部分权限是android系统中已经定义好了的一些权限,这部分一般是程序需要使用到系统原生的一些服务或者程序。比如:照相机、联系人、系统通知、SD卡读写、网络传输、GPS、Wifi等等。在不申请的情况下,这些资源是不能够使用的。使用方式如下:
<uses-permission android:name="android.permission.SEND_SMS"/>
- 用户自定义权限 :
这部分是用户在自己的程序中需要定义的权限,比如:一些特殊的机型提供的特殊服务、应用程序提供的特殊服务需要访问特殊资源。这个时候需要提醒用户授予许可。
//自定义权限
<permission android:name="com.example.myapp.permission.DEADLY_ACTIVITY"
android:label="@string/permlab_deadlyActivity"
android:description="@string/permdesc_deadlyActivity"
android:permissionGroup="android.permission-group.COST_MONEY"
android:protectionLevel="dangerous" />
按照权限的等级分类:
正常权限 :
这部分权限在使用的使用系统会自动许可,不需要提醒用户。(但是同样是要在AndroidMainfest中声明的)
比如:
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE更多请查看:Nomal Permissions
危险权限 :
因为会访问到用户敏感资源、或者影响用户体验,因此这部分权限在使用的时候会弹出提示框,获得用户许可之后才能得到权限。
比如:
(日历)
READ_CALENDAR
WRITE_CALENDAR
(联系人)
READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
(位置)
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
更多请查看:System Permissions
二、权限组
将同类权限集合在一起,以组的形式来调动这些权限,系统认为组是对用户可见的最小权限单位。当程序向用户弹出权限请求的时候,需要的权限是指定的,但是弹出来的请求描述是以权限组的描述形式展示的,同属于一个组的权限,描述是一样的。而且在同一个设备上,用户一旦同意了AndroidMainfest中某一个权限,那么与其同组的其他权限都被默认为允许的!这样是为了避免多次提醒用户造成的不便,系统认为组是用户许可的单位。换言之,用户是以权限组的形式来对权限做许可或者拒绝。
比如:
- READ_CONTACTS、WRITE_CONTACTS、GET_ACCOUNTS 同属于CONTACTS(联系人)组;
举例:
当应用程序需要用户授予权限时,弹出的提示框不指名具体权限,只显示该权限组的描述(比如:需要READ_CONTACTS权限,但他属于CONTACTS组,那么就提示用户:需要访问联系人),并且无论用户是否授予权限,AndroidMainfest中定义的属于该权限组的其他权限都不需要再次向用户询问(为了方便和体验)。
意思就是:如果你的应用程序当前需要的是READ_CONTACTS权限,如果用户同意,就等于同意了当前应用程序AndroidMainfest下所有属于该权限组的权限(假设该AndroidMainfest下包含了read、write、get的权限声明),那么下次如果程序需要请求WRITE_CONTACTS权限时,是不需要再次询问用户的,默认同意;同理,如果用户拒绝了当前权限,就相当于拒绝AndroidMainfest下所有属于该权限组的权限,下次需要请求该权限组其他权限时也会默认拒绝。
以上是关于android permission——关于权限你需要知道的事的主要内容,如果未能解决你的问题,请参考以下文章
Android 6.0 开发者对系统权限的使用与练习(Permissions Best Practices)
Android 6 Permissions => 禁用权限并返回应用程序时崩溃
Android 6.0 应用权限 -- 与系统权限一起工作(Working with System Permissions) 使用MarkDown重新整理了排版
关于Mac或Linux下GO的Permission denied提示错误
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )