Android -- 自定義權限

在android系統的安全模型中,應用程序在默認的狀況下不能夠執行任何對其餘應用程序,系統或者用戶帶來負面影響的操做。若是應用須要執行某些操做,就須要聲明使用這個操做對應的權限。 (在manifest文件中 添加 標記)。 android

app能夠自定義屬於本身的permission 或屬於開發者使用的同一個簽名的permission。定義一個permission 就是在menifest文件中添加一個permission標籤。 安全

<permission android:description="string resource"  
            android:icon="drawable resource"  
            android:label="string resource"  
            android:name="string"  
            android:permissionGroup="string"  
            android:protectionLevel=["normal" | "dangerous" |   
                                     "signature" | "signatureOrSystem"] />
  • android:description :對權限的描述,通常是兩句話,第一句話描述這個權限所針對的操做,第二句話告訴用戶授予app這個權限會帶來的後果 
  • android:label: 對權限的一個簡短描述 
  • android:name :權限的惟一標識,通常都是使用 報名加權限名 
  • android:permissionGroup: 權限所屬權限組的名稱 
  • android:protectionLevel: 權限的等級。 normal 是最低的等級,聲明次權限的app,系統會默認授予次權限,不會提示用戶;dangerous  權限對應的操做有安全風險,系統在安裝聲明此類權限的app時會提示用戶 ;signature  權限代表的操做只針對使用同一個證書籤名的app開放 ;signatureOrSystem  與signature相似,只是增長了rom中自帶的app的聲明

android:name 屬性是必須的,其餘的可選,未寫的系統會指定默認值app

Code

首先建立了兩個app,app A ,app B ; app A中註冊了一個BroadcastReceiver ,app B 發送消息 code

app A的menifest文件: orm

<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="com.example.testbutton"  
    android:versionCode="1"  
    android:versionName="1.0" >  
  
    <uses-sdk  
        android:minSdkVersion="7"  
        android:targetSdkVersion="15" />  
    <!-- 聲明權限 -->  
    <permission android:name="com.example.testbutton.RECEIVE" />  
  
    <application  
        android:icon="@drawable/ic_launcher"  
        android:label="@string/app_name"  
        android:theme="@style/AppTheme" >  
        <activity  
            android:name=".MainActivity"  
            launcheMode="singleTask"  
            android:configChanges="locale|orientation|keyboardHidden"  
            android:screenOrientation="portrait"  
            android:theme="@style/android:style/Theme.NoTitleBar.Fullscreen" >  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
        <!-- 註冊Broadcast Receiver,並指定了給當前Receiver發送消息方須要的權限 -->  
        <receiver  
            android:name="com.example.testbutton.TestButtonReceiver"  
            android:permission="com.example.testbutton.RECEIVE" >  
            <intent-filter>  
                <action android:name="com.test.action" />  
            </intent-filter>  
        </receiver>  
    </application>  
  
</manifest>

app B 的menifest 文件內容:xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="com.example.testsender"  
    android:versionCode="1"  
    android:versionName="1.0" >  
  
    <uses-sdk  
        android:minSdkVersion="7"  
        android:targetSdkVersion="15" />  
    <!-- 聲明使用指定的權限 -->  
    <uses-permission android:name="com.example.testbutton.RECEIVE" />  
  
    <application  
        android:icon="@drawable/ic_launcher"  
        android:label="@string/app_name"  
        android:theme="@style/AppTheme" >  
        <activity  
            android:name=".MainActivity"  
            android:label="@string/title_activity_main" >  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
    </application>  

</manifest>

這樣app B 給app A 發送消息,A就能夠收到了,若未在app B的menifest文件中聲明使用相應的權限,app B發送的消息,A是收不到的。blog

一樣應用於Activity等組件。 ip

另外,也可在app B 的menifest文件中聲明權限時,添加android:protectionLevel="signature",指定app B只能接收到使用同一證書籤名的app 發送的消息。 開發

我是天王蓋地虎的分割線

參考:http://berdy.iteye.com/blog/1782854get

相關文章
相關標籤/搜索