天天看點

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一定能得到描述的字元串:

我們還是通過一個例程來學習下,可以讀取到權限的本地語言,如中文的描述,還是挺好玩的哈:

下一篇: 雲計算

繼續閱讀