Android中註冊和發送廣播中添加權限

Android中註冊和發送廣播中添加權限

在一個安全穩定的App中,廣播尤爲重要。Android中很多機制都是爲了保證廣播的安全性,比如LocalBroadcastManager,底層的原理是Handler。而註冊和發送廣播中添加權限也是必須要了解的。
總而言之,添加權限的設計就是爲了控制如下兩個方面:

  1. 限制哪個應用可以給我發送廣播,避免受各種Action的干擾
  2. 限制哪個應用可以接收我發出去的廣播,避免發出的Action被竊聽

如果我們自身的應用是李四的話,那就是如下情景:

Created with Raphaël 2.1.0張三張三李四李四王五王五發廣播給你可以嗎?防止被各種Action干擾發廣播給你可以嗎?防止發出的Action被竊聽

姑且認爲張三給李四發廣播時第一種情況,而李四給王五發是第二種情況。

針對第一種情況:

1.在李四的APP中聲明如下權限:

<permission android:name="com.ctrlz.www">

2.在李四APP中的xml中靜態註冊或在代碼中動態註冊帶權限的register。

<receiver android:name=".MyBroadcastReceiver"
    android:permission="com.ctrlz.www">
    <intent-filter>
        <action
            android:name="com.ctrlz.www"/>
    </intent-filter>
</receiver>

3.在張三APP的Mainfest文件中添加:

<uses-permission android:name="com.ctrlz.www"/>

4.在張三的APP發送普通廣播即可:

sendBroadcast(new Intent("com.ctrlz.www"));

經過這樣的處理,便能讓擁有權限的APP給李四發送廣播了。

針對第二種情況:

1.在李四的APP中,聲明如下權限:

    <permission android:name="com.baidu.www"/>

2.在李四APP中發送時添加如下權限:

    sendBroadcast(intent, "com.baidu.www");

3.在王五的APP中聲明如下權限:

    <uses-permission android:name="com.baidu.www"/>

這樣便能控制誰有權接收我的廣播了。

兩個方面的操作看似簡單,其實非常繞,一不小心就會出錯。在實際的編碼過程中一定要牢記兩點便可以降低出錯的概率。
1. 分清楚自己的APP的角色,是張三、李四、王五中的哪一個。
2. 明白帶權限的註冊和帶權限的發送,並不是成對出現的。

真實的環境中,上面的情況只是一種。更多的是下面的情況:
1. 針對第一種情況,如果把這些操作都寫在一個APP裏面,會產生什麼樣的效果呢?
2. 針對第二種情況,如果把這些操作都寫在一個APP裏面,會產生什麼樣的情況呢?
3. 針對這兩種情況,把所有的操作都寫在一個APP裏面,又是爲了什麼?

相信很多讀者已經暈了,筆者遇到的情況比這還複雜些,在項目中,有一個類是給第三方應用通過createPackageContext直接調用的,花了很長時間才理清頭緒。如果感興趣,寫寫demo不妨試試看。
這篇文章就當拋磚引玉了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章