詳解Android自定義權(quán)限使用總結(jié)
1、如何聲明自定義權(quán)限
在Manifest文件中使用Permission標(biāo)簽定義自己的權(quán)限:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.bright.permission"> <permission android:name="com.bright.permission.TEST" android:description="" android:permissionGroup="com.bright.permission-group.TEST" android:protectionLevel="signature" /> ... </manifest>
解釋下各個(gè)屬性:
- name,該標(biāo)簽就是權(quán)限的名字。
- description,該標(biāo)簽就是權(quán)限的介紹。
- permissionGroup,指定該權(quán)限的組。
- protectionLevel,指定保護(hù)級(jí)別。
Android將權(quán)限分為若干個(gè)保護(hù)級(jí)別,normal, dangerous, signature等。normal就是正常權(quán)限,該權(quán)限并不會(huì)給用戶或者設(shè)備的隱私帶來風(fēng)險(xiǎn);dangerous就是危險(xiǎn)權(quán)限,該級(jí)別的權(quán)限通常會(huì)給用戶的數(shù)據(jù)或設(shè)備的隱私帶來風(fēng)險(xiǎn);signature指的是,只有相同簽名的應(yīng)用才能使用該權(quán)限。更多的介紹可以參考 protectionLevel 。
2、使用場(chǎng)景
自定義權(quán)限一般用于暴露出去的組件,提高安全性。Android允許一個(gè)應(yīng)用(客戶端)調(diào)用另一個(gè)應(yīng)用(服務(wù)端)的組件。那么作為服務(wù)端的應(yīng)用就得暴露相應(yīng)的組件,客戶端應(yīng)用才能訪問。當(dāng)然,在暴露的時(shí)候,權(quán)限是非必須的,如果暴露的組件沒有權(quán)限的話,那么任何的其他應(yīng)用都可以來調(diào)用該組件;如果該組件申請(qǐng)了權(quán)限,那么只有擁有該權(quán)限的應(yīng)用才能調(diào)用該組件。
<activity android:name=".TestA_Activity" android:exported="true" ... />
exported屬性就是代表是否暴露。該例子并沒有要求調(diào)用者需要申請(qǐng)權(quán)限,也就是說,任何的應(yīng)用就可以調(diào)用才組件。如果每個(gè)應(yīng)用都可以調(diào)用我們的組件的話,顯然是不安全的,我們希望只有使用了我們的權(quán)限的應(yīng)用,才能調(diào)用我們暴露的組件,我們可以在activity中加入permission屬性。
<activity android:name=".TestA_Activity" android:exported="true" ... />
Intent intent = new Intent(); intent.setClassName("com.bright.permission", "com.bright.permission.TestA_Activity"); startActivity(intent);
除了上面的方式,還可以通過intent-filter隱式啟動(dòng):
<activity android:name=".TestA_Activity" android:exported="true" ... > <intent-filter> <action android:name="com.bright.permission.action.TEST"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
Intent intent = new Intent(); intent.setAction("com.bright.permission.action.TEST"); startActivity(intent);
3、自定義權(quán)限注意點(diǎn)
3.1、兩個(gè)應(yīng)用聲明了相同的權(quán)限
- Android不允許兩個(gè)不同的應(yīng)用定義一個(gè)相同名字的權(quán)限(除非這兩個(gè)應(yīng)用擁有相同的簽名),所以在命名的時(shí)候,需要特別注意。
- 擁有相同自定義權(quán)限的軟件必須使用同樣的簽名,否則后一個(gè)程序無法安裝。
3.2、和應(yīng)用安裝順序的關(guān)系。
場(chǎng)景:App A中聲明了權(quán)限PermissionA,App B中使用了權(quán)限PermissionA。
情況一:PermissionA的保護(hù)級(jí)別是normal或者dangerous
App B先安裝,App A后安裝,此時(shí)App B沒有獲取到PermissionA的權(quán)限。
即,此種情況下,權(quán)限必須先聲明再使用。即使App A和App B是相同的簽名。
情況二:PermissionA的保護(hù)級(jí)別是signature或者signatureOrSystem
App B先安裝,App A后安裝,如果App A和App B是相同的簽名,那么App B可以獲取到PermissionA的權(quán)限。如果App A和App B的簽名不同,則App B獲取不到PermissionA權(quán)限。
即,對(duì)于相同簽名的app來說,不論安裝先后,只要是聲明了權(quán)限,請(qǐng)求該權(quán)限的app就會(huì)獲得該權(quán)限。
這也說明了對(duì)于具有相同簽名的系統(tǒng)app來說,安裝過程不會(huì)考慮權(quán)限依賴的情況。安裝系統(tǒng)app時(shí),按照某個(gè)順序(例如名字排序,目錄位置排序等)安裝即可,等所有app安裝完了,所有使用權(quán)限的app都會(huì)獲得權(quán)限。
3.3、權(quán)限的獲取以及版本兼容
Android6.0引入了動(dòng)態(tài)權(quán)限,這個(gè)大家都知道了。前面說到的自定義的權(quán)限的安全級(jí)別android:protectionLevel會(huì)影響權(quán)限在Android6.0+系統(tǒng)的使用
- android:protectionLevel="normal",不需要?jiǎng)討B(tài)申請(qǐng)
- android:protectionLevel="dangerous",需要?jiǎng)討B(tài)申請(qǐng)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android如何判斷手機(jī)是否有錄音權(quán)限的工具類
- Android基于注解的6.0權(quán)限動(dòng)態(tài)請(qǐng)求框架詳解
- Android權(quán)限HaloPermission詳細(xì)使用
- Android 采用AOP方式封裝6.0權(quán)限管理的方法
- 詳解Android運(yùn)行時(shí)權(quán)限及APP適配方法
- 詳解Android 全局彈出對(duì)話框SYSTEM_ALERT_WINDOW權(quán)限
- Android MIUI通知類短信權(quán)限的坑
- Android編程實(shí)現(xiàn)應(yīng)用獲取包名、版本號(hào)、權(quán)限等信息的方法
- 安卓Android6.0權(quán)限動(dòng)態(tài)獲取操作示例
- 淺析Android位置權(quán)限以及數(shù)組尋找索引的坑
相關(guān)文章
Android View 完美實(shí)現(xiàn)EditText 在軟鍵盤上邊的示例
本篇文章主要介紹了Android View 完美實(shí)現(xiàn)EditText 在軟鍵盤上邊的示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08Android開發(fā)中遇到端口號(hào)占用問題解決方法
這篇文章主要介紹了Android開發(fā)中遇到端口號(hào)占用問題解決方法,本文給出了一個(gè)簡(jiǎn)潔實(shí)用的方法來解決這個(gè)煩人的問題,需要的朋友可以參考下2015-06-06Android實(shí)現(xiàn)仿excel數(shù)據(jù)表格效果
這篇文章主要介紹了Android實(shí)現(xiàn)仿excel數(shù)據(jù)表格效果的實(shí)現(xiàn)代碼,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10Mac Android Studio 3.0 Terminal 中文亂碼問題處理
本文給大家分享的是在更新Android Studio 3.0之后,使用Terminal時(shí),發(fā)現(xiàn) git log 命令查看歷史 log會(huì)亂碼,以及最后的解決方法,推薦給小伙伴們2017-11-11Android 異步任務(wù)和消息機(jī)制面試題分析
這篇文章主要為大家介紹了Android 異步任務(wù)和消息機(jī)制面試題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Android activity堆棧及管理實(shí)例詳解
這篇文章主要介紹了Android activity堆棧及管理實(shí)例詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)android activity堆棧相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-09-09Android通過自定義Activity實(shí)現(xiàn)懸浮的Dialog詳解
這篇文章主要給大家介紹了關(guān)于Android通過自定義Activity實(shí)現(xiàn)懸浮的Dialog的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,感興趣的朋友們下面來一起看看吧。2017-05-05