Android自定義權限


一、自定義權限

  自定義權限,一般是考慮到應用共享組件時的安全問題。我們知道在四大組件 AndroidManifest 中注冊的時候,添加 exported = "true" 這一屬性節點,這樣就可以使其被其他 App 所調用。但是我們希望只有被允許的App才能調用,這個時候可以考慮使用”自定義權限“來實現。我們定義提供組件的 App 為開放端,使用開放組件的 App 為接入端,用這兩個概念來描述自定義權限。

  1. 開放端:在 AndroidManifest 的 manifest 節點下定義權限:

<permission
   android:name="com.sl.permission.aidl"
   android:description="@string/service_permission"
   android:permissionGroup="com.sl.permissions"
   android:protectionLevel="signature" />

  Permission 屬性

  <1> name : 權限名稱

  <2> description : 權限描述

  <3> permissionGroup : 指定權限屬於的權限組

  <4> protectionLevel : 權限保護級別

  權限保護級別:

ProtectionLevel Desc
Normal                          這是最低風險的權限,如果應用聲明了此權限,也不會提示安裝應用的用戶授權(例如,如果聲明了定位權限,則應用到定位功能時,會明確提示用戶,是否授予定位權限,但是protectionLevel為normal的不會明確提示,直接默認授予),系統直接默認該應用有此權限;
dangerous 這種級別的權限風險更高,擁有此權限可能會訪問用戶私人數據或者控制設備,給用戶帶來負面影響,這種類型的權限一般不會默認授權。
signature 這種權限級別,只有當發請求的應用和接收此請求的應用使用同一簽名文件,並且聲明了該權限才會授權,並且是默認授權,不會提示用戶授權
signatureOrSystem                                              

這種權限級別是系統授權的系統應用或者相同簽名的應用,一般避免使用該級別,因為 signature 已經能滿足大部分需求。

  開放組件:添加 permission 屬性為自定義的權限

 <service
      android:name=".BookManagerService"
      android:permission="com.sl.permission.aidl"
      android:exported="true">
      <intent-filter>
          <action android:name="com.sl.aidl" />
          <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
</service>

  2. 接入端:在 AndroidManifest 的 manifest 節點下使用自定義權限

  添加權限:

<uses-permission android:name="com.sl.permission.aidl" />

  調用開放組件:

Intent service = new Intent();
service.setAction("com.sl.aidl");
service.setPackage("com.sl.binderservice");
bindService(service, mConnection, Context.BIND_AUTO_CREATE);

  在接入端添加自定義的權限才能正常調用開放接口,否則就會出現下面這個錯誤,這也正好實現了過濾接入端的需求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM