国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳解Android自定義權限使用總結

2019-12-12 00:42:48
字體:
來源:轉載
供稿:網友

1、如何聲明自定義權限

在Manifest文件中使用Permission標簽定義自己的權限:

<?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>

解釋下各個屬性:

  1. name,該標簽就是權限的名字。
  2. description,該標簽就是權限的介紹。
  3. permissionGroup,指定該權限的組。
  4. protectionLevel,指定保護級別。

Android將權限分為若干個保護級別,normal, dangerous, signature等。normal就是正常權限,該權限并不會給用戶或者設備的隱私帶來風險;dangerous就是危險權限,該級別的權限通常會給用戶的數據或設備的隱私帶來風險;signature指的是,只有相同簽名的應用才能使用該權限。更多的介紹可以參考 protectionLevel 。

2、使用場景

自定義權限一般用于暴露出去的組件,提高安全性。Android允許一個應用(客戶端)調用另一個應用(服務端)的組件。那么作為服務端的應用就得暴露相應的組件,客戶端應用才能訪問。當然,在暴露的時候,權限是非必須的,如果暴露的組件沒有權限的話,那么任何的其他應用都可以來調用該組件;如果該組件申請了權限,那么只有擁有該權限的應用才能調用該組件。

<activity android:name=".TestA_Activity" android:exported="true" ... />

exported屬性就是代表是否暴露。該例子并沒有要求調用者需要申請權限,也就是說,任何的應用就可以調用才組件。如果每個應用都可以調用我們的組件的話,顯然是不安全的,我們希望只有使用了我們的權限的應用,才能調用我們暴露的組件,我們可以在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隱式啟動:

<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、自定義權限注意點

3.1、兩個應用聲明了相同的權限

  1. Android不允許兩個不同的應用定義一個相同名字的權限(除非這兩個應用擁有相同的簽名),所以在命名的時候,需要特別注意。
  2. 擁有相同自定義權限的軟件必須使用同樣的簽名,否則后一個程序無法安裝。

3.2、和應用安裝順序的關系。

場景:App A中聲明了權限PermissionA,App B中使用了權限PermissionA。

情況一:PermissionA的保護級別是normal或者dangerous

App B先安裝,App A后安裝,此時App B沒有獲取到PermissionA的權限。

即,此種情況下,權限必須先聲明再使用。即使App A和App B是相同的簽名。

情況二:PermissionA的保護級別是signature或者signatureOrSystem

App B先安裝,App A后安裝,如果App A和App B是相同的簽名,那么App B可以獲取到PermissionA的權限。如果App A和App B的簽名不同,則App B獲取不到PermissionA權限。

即,對于相同簽名的app來說,不論安裝先后,只要是聲明了權限,請求該權限的app就會獲得該權限。

這也說明了對于具有相同簽名的系統app來說,安裝過程不會考慮權限依賴的情況。安裝系統app時,按照某個順序(例如名字排序,目錄位置排序等)安裝即可,等所有app安裝完了,所有使用權限的app都會獲得權限。

3.3、權限的獲取以及版本兼容

Android6.0引入了動態權限,這個大家都知道了。前面說到的自定義的權限的安全級別android:protectionLevel會影響權限在Android6.0+系統的使用

  • android:protectionLevel="normal",不需要動態申請
  • android:protectionLevel="dangerous",需要動態申請

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保定市| 元朗区| 宜州市| 盐亭县| 长阳| 磐石市| 华亭县| 新疆| 双江| 分宜县| 开鲁县| 宜川县| 兴宁市| 汪清县| 博罗县| 台中市| 赣州市| 天台县| 滁州市| 洪雅县| 文山县| 靖西县| 云梦县| 铁岭市| 临江市| 高雄县| 格尔木市| 拉孜县| 崇明县| 延庆县| 南昌市| 馆陶县| 宜春市| 波密县| 松潘县| 久治县| 共和县| 湛江市| 长兴县| 手机| 成安县|