天天看点

Android应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关APIAndroid应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关API

packagemanager中提供的武器,可以用“既多又杂,版本变化大”来形容。

不过,我们通过分类和排序的方法将它们组织起来,让开发者同学们可以学会使用这些强大的武器!

这一节我们将学习:

如何查询系统中都有哪些权限组

每个权限组都有些什么权限

如何查询是否被授予某一权限

如何查询都有哪些应用申请了某一项权限

我们先看第一个大族的api,permission相关的api

Android应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关APIAndroid应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关API

创始成员7个. android 2.2版新增1个,android 4.3新增1个,android 6.0再增1个。共计10个。

一共七个,基本上是权限的增,删,检查和查询4种操作。

addpermission:动态新增一个新权限

removepermission:删除一个权限

checkpermission:校验权限是否通过

getallpermissiongroups:获取系统中所有的权限组

getpermissiongroupinfo:查询某个权限组的内容。系统中都有哪些权限组可通过getallpermissiongroups来查询

querypermissionsbygroup:查询一个权限组下面都有些什么权限

getpermissioninfo:根据权限名获取这个权限对象

原型:

参数:

真棒,只有一个选择:get_meta_data。

我们写一段例程看看效果:

日志结果如下:

可见,我当前所用的android m手机上,有下面这些perssiongroup:

android.permission-group.contacts:联系人相关权限组

android.permission-group.phone:电话相关权限组

android.permission-group.appstore_cloud:应用商店云服务相关权限组

android.permission-group.calendar:日历相关权限组

android.permission-group.camera:相机相关权限组

android.permission-group.sensors:传感器相关权限组

android.permission-group.location:位置服务相关权限组

android.permission-group.storage:存储相关权限组

android.permission-group.microphone:话筒相关权限组

android.permission-group.sms:短消息相关权限组

这其中用到的permissiongroupinfo类,用于来存储权限组的信息. 我们后面专门有相关数据结构类的详细说明。

根据字符串来查询特定的perssiongroupinfo。

例程:

通过上面两个方法的学习,我们已经可以获取permissiongroup的信息了。那么,我们如何去知道一个权限组里都有哪些权限呢?

我们可以通过querypermissionsbygroup方法来实现这个需求,请看例程:

输出的结果如下:

从上面的log上我们可以看到,android.permission-group.contacts组里有3个成员:

android.permission.write_contacts:允许该应用修改您手机上存储的联系人的相关数据,包括您通过打电话、发送电子邮件或以其他方式与特定联系人通信的频率。此权限可让应用删除联系人数据。

android.permission.get_accounts:允许该应用获取手机已知的帐户列表,其中可能包括由已安装的应用创建的所有帐户。

android.permission.read_contacts:允许该应用读取您手机上存储的联系人的相关数据,包括您通过打电话、发送电子邮件或以其他方式与特定个人通信的频率。此权限可让应用保存您的联系人数据,而恶意应用可能会在您不知情的情况下分享联系人数据。

根据名字查找对应的权限对象,不多说了,上例程:

输出如下:

检查是否一个包是否被允许某个权限。看例程:

addpermission和removepermission两个方法暂时没见到有人用到,先略过不讲了。

addpermissionasync:异步添加新权限,可以快速返回。可以用于批量添加权限。

这个api也没见有人用过,就不讲了。

getpackagesholdingpermissions:查看当前系统里安装的应用中,哪些使用了这个权限。这个api很好玩啊,能查到哪些应用用到了危险的权限。

输出吓一跳,怎么这么多应用要改联系人!

ispermissionrevokedbypolicy:查看权限是否符合policy的规定。如果policy不允许,就只能换policy,否则无法通过。

公开域:

public charsequence nonlocalizeddescription:如果这个权限组的名字字符串直接定义在androidmanifest.xml中,那么通过这个域就可以得到它的字符串名字。如果是空,那么说明是调用的字符串资源,要去查另一个属性descriptionres。

public int descriptionres:如果上面的nonlocalizeddescription是空,那么这个肯定不空。可以调用loaddescription(pm)方法获取。

其实loaddescription中早已经考虑到上面所讲的两种情况了,调用loaddescription一定能得到描述的字符串:

我们还是通过一个例程来学习下,可以读取到权限的本地语言,如中文的描述,还是挺好玩的哈:

下一篇: 云计算

继续阅读