Android 6.0 版本(Api 23)推出了很多新的特性, 大幅提升了用户体验, 同时也为程序员带来新的负担. 动态权限管理 就是这样, 一方面让用户更加容易的控制自己的隐私, 一方面需要重新适配应用权限,Android将权限分为普通权限和危险权限,危险权限需要在使用时让用户手动允许。危险权限一共9组24个权限,表格如下:

权限组名 权限名
CALENDAR READ_CALENDAR,WRITE_CALENDAR
CAMERA CAMERA
CONTACTS READ_CONTACTS,WRITE_CONTACTS,GET_ACCOUNTS
LOCATION ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION
MICROPHONE RECORD_AUDIO
PHONE READ_PHONE_STATE,CALL_PHONE, READ_CALL_LOG,WRITE_CALL_LOG,ADD_VOICEMAIL,USE_SIP,PROCESS_OUTGOING_CALLS
SENSORS BODY_SENSORS
SMS SEND_SMS,RECEIVE_SMS,READ_SMS,RECEIVE_WAP_PUSH,RECEIVE_MMS
STORAGE READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE

危险权限解释:

android.permission.READ_CALENDAR允许程序读取用户日历数据

android.permission.WRITE_CALENDAR允许一个程序写入但不读取用户日历数据

android.permission.CAMERA,允许访问摄像头进行拍照

android.permission.READ_CONTACTS允许程序读取用户联系人数据

android.permission.WRITE_CONTACTS允许程序写入但不读取用户联系人数据

android.permission.GET_ACCOUNTS访问一个帐户列表在Accounts Service中

android.permission.ACCESS_FINE_LOCATION允许一个程序访问精良位置(如GPS)

android.permission.ACCESS_COARSE_LOCATION允许一个程序访问CellID或WiFi热点来获取粗略的位置

android.permission.RECORD_AUDIO允许程序录制音频

android.permission.CALL_PHONE允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认

android.permission.READ_PHONE_STATE 访问电话状态

android.permission.READ_CALL_LOG  查看电话日志

android.permission.WRITE_CALL_LOG写入电话日志

android.permission.ADD_VOICEMAIL  允许应用程序添加系统中的语音邮件

android.permission.USE_SIP  允许程序使用SIP视频服务

android.permission.PROCESS_OUTGOING_CALLS   允许应用程序监视、修改、忽略拨出的电话

android.permission.BODY_SENSORS  允许该应用存取监测您身体状况的传感器所收集的数据,例如您的心率

android.permission.SEND_SMS允许程序发送SMS短信

android.permission.RECEIVE_SMS允许程序监控一个将收到短信息,记录或处理

android.permission.READ_SMS允许程序读取短信息

android.permission.RECEIVE_WAP_PUSH允许程序监控将收到WAP PUSH信息

android.permission.RECEIVE_MMS允许一个程序监控将收到MMS彩信,记录或处理

android.permission.WRITE_EXTERNAL_STORAGE   允许程序写入外部存储,如SD卡上写文件

android.permission.READ_EXTERNAL_STORAGE   访问您设备上的照片、媒体内容和文件

想要了解更全权限可以看我之前的文章:

Android各种访问权限Permission详解

一.permission_group与permisson区别、作用

Android Manifest下有两个内部类, 一个是permission ,还有一个是permission_group。对于Permission, 可能做过Android开发的人应该都知道, 这就是权限。 在这个类中定义了很多的权限,比如网络访问权限、蓝牙设备访问权限、振动器使用权限等等

android:description

权限的用户可读说明,比标签更长,信息更丰富。该说明可能会显示以向用户说明权限 - 例如,当系统询问用户是否向其他应用授予权限时。

此属性必须设置为对字符串资源的引用;与 label 属性不同,它不能是原始字符串。

android:icon

对表示权限的图标的可绘制资源的引用。

android:label

可向用户显示的权限的名称。

为方便起见,您可以在开发应用时将此标签直接设置为原始字符串。不过,当准备好发布应用时,应将标签设置为对字符串资源的引用,以便可以像界面中的其他字符串一样进行本地化。

android:name

权限的名称。这是将在代码中(例如,在 <uses-permission> 元素和应用组件的 permission 属性中)用于引用权限的名称。

注意 :系统不允许多个软件包声明具有相同名称的权限,除非所有软件包都使用相同的证书进行签名。如果某个软件包声明了一个权限,则系统不允许用户安装具有相同权限名称的其他软件包,除非这些软件包使用与第一个软件包相同的证书进行签名。为了避免命名冲突,我们建议为自定义权限使用反向域式命名,例如 com.example.myapp.ENGAGE_HYPERSPACE

android:permissionGroup

将此权限分配给一个组。此属性的值是该组的名称,必须使用此应用或其他应用中的 <permission-group> 元素声明。如果未设置此属性,则此权限不会属于某个组。

android:protectionLevel

说明权限中隐含的潜在风险,并指示系统在确定是否将权限授予请求授权的应用时应遵循的流程。

每个保护级别都包含基本权限类型以及零个或多个标记。例如, "dangerous" 保护级别没有标记。相反,保护级别 "signature|privileged" "signature" 基本权限类型和 "privileged" 标记的组合。

下表列出了所有基本权限类型。如需查看标记列表,请参阅 protectionLevel

可以看到,这边先定义了一个PermissionGroup : android.permission-group.COST_MONEY, 然后又定义了两个Permission :

android.permission.SEND_SMS  和 android.permission.CALL_PHONE , 需要注意的是,这两个权限中都一个android:permissionGroup属性,这个属性就指定了这个权限所属的PermissionGroup。

而PermissionGroup在定义时,仅仅制定了label和descrip , 就是说明一下这个权限组的作用,没什么其他用处。

permissiongroup,就是permission里面的一个tag。主要作用是用来显示application需要的权限,比如你使用了<uses-permission android:name="android.permission.INTERNET" />权限,
那么在android的setting->applications->manage applications->你的应用程序,显示的是需要“Network communication”权限,这个“Network communication”就是permissionGroup的label。
所以说permissiongroup只是一个逻辑分组,作用也只有显示应用程序权限给用户看的。 当然需要额外说明的是, 并不是所有的Permission都有PermissionGroup, 有的可能没有分组。 这些没有分组的Permission也会自己指定label, 以便告知用户这个权限的作用。

ActivityCompat.request Permission s() ActivityCompat.shouldShowRequest Permission Rationale() ActivityCompat.checkSelf Permission (value) Android 9.0 对于 权限 处理和 6.0 ... 普通 权限 是指那些不会威胁到用户安全和隐私的 权限 ,这部分 权限 系统会自动帮我们进行授权不需要手动操作。 危险 权限 则表示那些可能会触及到用户安全隐私或者对设备安全造成影响的 权限 ,如获取手机联系人信息等 权限 ,申请者部分 权限 必须有用户收到点击授权才可以,否则程序无法使用相应的功能。 下面列出 Android 中所有的 危险 权限 ,一共是9组24个 权限 权限 组名 权限 名称 CALENDAR(日历) READ_CALENDAR WRITE_CALENDAR CAMERA(相机) 在开发中我们在适配 6.0 /7.0手机的时候或者是有时候应用上架前上传应用市场被拒原因是我们申请了很多无用的 危险 权限 。那么 android 中到底都哪些应用 权限 危险 权限 呢? Android 权限 分为普通 权限 (Normal Permission )和 危险 权限 (Dangerous Permission )。 一 . 介绍: Normal Permission :在 Android Manifest.xml文件里配置好,App安装时就会默认获得这些 权限 ,即使是在 Android 6.0 系统的手机上,用户也无法在安装后动态取消这些normal 权限 。 Dangerous Permission :... 转载自:https://blog.csdn.net/qq_34763699/article/details/80509882一、说明 Android 6.0 开始,Google将 权限 分为两类,一类是Normal Permission , 这类 权限 一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission ,一般是涉及到用户隐私的,需要用户进行授权... 谷歌官方将 权限 分为了两类,一个是正常 权限 (Normal Permission s),这类 权限 不涉及用户隐私,是不需要用户进行授权的,比如访问网络,手机震动等。还有一类是 危险 权限 (Dangerous Permission s),一般是涉及到用户隐私的,需要用户进行授权,比如操作SD卡的写入,相机,录音等。 对 权限 的整理: 正常 权限 (Normal Permission s): ACCESS_LOCATION_EXTRA_COMMANDS ACCESS_NETWORK_STATE ACCESS_NOTIFICAT 在我们适配 6.0 以后的机器时,就需要辨别哪些是属于 危险 权限 ,在这里我就记录一下。 Normal Permission s如下 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 CHANG 刚建了一个QQ群,感兴趣的大家一起多多交流:544645972   在 android permission 权限 与安全机制解析(上)篇博客中,我已经详细介绍了 android 相关系统 permission 和自定义 permission ,以及一些 权限 机制和安全机制。这篇博客主要将会介绍到 android 6.0 的相关 权限 更改,原理和相关的处理方式,解决方法等。   就以我以前的一个仿最新版微信相册为例子来分 Android 中有很多 权限 ,但并非所有的 权限 都是敏感 权限 Android 6.0 系统开始对所有 权限 进行了以下分类:正常 权限 是对用户隐私或其他应用操作风险很小的区域。如果应用声明其需要正常 权限 ,系统会自动向应用授予该 权限 。 在 Android 8.1(API 级别 27)中,下列 权限 被分类为正常 权限 危险 权限 涵盖应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他应用的操作产生影响的区域。如果应用声明其需要 危险 权限 ,则用户必须明确向应用授予该 权限 权限 组 任何 权限 都可属于一个 权限 组,包括正常 权限