在android系統的安全模型中,應用程序在默認的狀況下不能夠執行任何對其餘應用程序,系統或者用戶帶來負面影響的操做。若是應用須要執行某些操做,就須要聲明使用這個操做對應的權限。 (在manifest文件中 添加
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:name 屬性是必須的,其餘的可選,未寫的系統會指定默認值app
首先建立了兩個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