Android廣播接收器(三)

本地廣播

前面兩篇文章Android廣播接收器(一)Android廣播接收器(二)講的都屬于全局廣播肺孵,即發(fā)出的廣播可以被其他任何應(yīng)用程序接收到,同樣我們也可以接受來自其他應(yīng)用程序的廣播滩援,這樣就容易引起安全問題。

利用本地廣播就可以解決廣播的安全問題,這類廣播只能在應(yīng)用程序的內(nèi)部進(jìn)行傳遞盏触,并且廣播接收器也只能接收來自本應(yīng)用程序發(fā)出的廣播。

本地廣播主要就是使用一個LocalBroadcastManager來管理廣播块饺,提供了發(fā)送廣播和注冊廣播接收器的方法赞辩。接下來通過代碼看看如何實(shí)現(xiàn)本地廣播,主要還是通過之前建好的BroadcastTest這個項(xiàng)目來進(jìn)行測試,修改MainActivity的代碼即可授艰。

public class MainActivity extends AppCompatActivity {
    
    private IntentFilter intentFilter;    
    private LocalBroadcastManager localBroadcastManager;    
    private LocalReceiver localReceiver;    

    @Override    
    protected void onCreate(Bundle savedInstanceState) {        
    
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.activity_main); 
       
        localBroadcastManager = localBroadcastManager.getInstance(this);//獲取實(shí)例        
        intentFilter = new IntentFilter();        
        intentFilter.addAction("com.feiben.broadcasttest.LOCAL_BROADCAST");   
        localReceiver = new LocalReceiver();        
        localBroadcastManager.registerReceiver(localReceiver, intentFilter);//注冊本地廣播監(jiān)聽器
        
        Button btnSendBroadcast = (Button) findViewById(R.id.btn_send_broadcast);        
        btnSendBroadcast.setOnClickListener(new View.OnClickListener() {            
            @Override            
            public void onClick(View v) {                
                Intent intent = new Intent("com.feiben.broadcasttest.LOCAL_BROADCAST");                
                localBroadcastManager.sendBroadcast(intent);//發(fā)送本地廣播            
            }        
        });    
    }    

    @Override    
    protected void onDestroy() {        
        super.onDestroy();        
        localBroadcastManager.unregisterReceiver(localReceiver);    
    } 
   
    class LocalReceiver extends BroadcastReceiver {        

        @Override       
        public void onReceive(Context context, Intent intent) {            
            Toast.makeText(context,"received local broadcast",Toast.LENGTH_SHORT).show();        
        }    
    }
}

可以看出本地廣播與之前的動態(tài)注冊廣播接收器的方法基本上是一致的辨嗽。不同的只是在先通過LocalBroadcastManager的getInstance()方法得到一個LocalBroadcastManager的實(shí)例,然后在注冊以及發(fā)送廣播的時候分別調(diào)用LocalBroadcastManager的registerReceiver()方法和sendBroadcast()方法淮腾。

為了驗(yàn)證本地廣播只能在BroadcastTest這個程序內(nèi)傳播糟需,我在BroadcastTest2項(xiàng)目中也來接收com.feiben.broadcasttest.LOCAL_BROADCAST這條廣播。打開BroadcastTest2修改MainActivity的代碼,將原來的靜態(tài)注冊廣播改為動態(tài)注冊来破。

public class MainActivity extends AppCompatActivity {    

    private IntentFilter intentFilter;    
    private AnotherBroadcastReceiver receiver;    

    @Override    
    protected void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.activity_main);   
          
        intentFilter = new IntentFilter();        
        intentFilter.addAction("com.feiben.broadcasttest.LOCAL_BROADCAST");        
        receiver = new AnotherBroadcastReceiver();        
        registerReceiver(receiver,intentFilter);    
    }
}

將BroadcastTest2安裝到模擬器上篮灼,再啟動BroadcastTest,點(diǎn)擊Send Braodcast這個按鈕徘禁,可以看到Toast只顯示了一次诅诱,BraodcastTest2接收不到com.feiben.broadcasttest.LOCAL_BROADCAST這條廣播。

本地廣播只能通過動態(tài)注冊的方式來接收送朱。


總結(jié)一下本地廣播的幾點(diǎn)優(yōu)勢:

  • 本地廣播發(fā)送的廣播只能在我們的程序內(nèi)部傳播娘荡,所以不用擔(dān)心機(jī)密數(shù)據(jù)泄漏的問題。
  • 其他的程序也無法將廣播發(fā)送到我們程序的內(nèi)部驶沼,因此不用擔(dān)心會有安全漏洞的隱患炮沐。
  • 發(fā)送本地廣播比起發(fā)送全局廣播更加高效。

Android廣播接收器的內(nèi)容就到這里回怜,下一篇文章Android數(shù)據(jù)存儲(一)將開始介紹Android的數(shù)據(jù)存儲大年。由于本人水平有限,如有錯誤玉雾,歡迎大家指正翔试。共同學(xué)習(xí)進(jìn)步!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末复旬,一起剝皮案震驚了整個濱河市垦缅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驹碍,老刑警劉巖壁涎,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凡恍,死亡現(xiàn)場離奇詭異,居然都是意外死亡怔球,警方通過查閱死者的電腦和手機(jī)嚼酝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庞溜,“玉大人革半,你說我怎么就攤上這事×髀耄” “怎么了又官?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長漫试。 經(jīng)常有香客問我六敬,道長,這世上最難降的妖魔是什么驾荣? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任外构,我火速辦了婚禮,結(jié)果婚禮上播掷,老公的妹妹穿的比我還像新娘审编。我一直安慰自己,他們只是感情好歧匈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布垒酬。 她就那樣靜靜地躺著,像睡著了一般件炉。 火紅的嫁衣襯著肌膚如雪勘究。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天斟冕,我揣著相機(jī)與錄音口糕,去河邊找鬼。 笑死磕蛇,一個胖子當(dāng)著我的面吹牛景描,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秀撇,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼超棺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捌袜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤炸枣,失蹤者是張志新(化名)和其女友劉穎虏等,沒想到半個月后弄唧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霍衫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年候引,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敦跌。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡澄干,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柠傍,到底是詐尸還是另有隱情麸俘,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布惧笛,位于F島的核電站从媚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏患整。R本人自食惡果不足惜拜效,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望各谚。 院中可真熱鬧紧憾,春花似錦、人聲如沸昌渤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愈涩。三九已至望抽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間履婉,已是汗流浹背煤篙。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毁腿,地道東北人辑奈。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像已烤,于是被迫代替她去往敵國和親鸠窗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容