Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 之使用LocalBroadcastManager解決BroadcastReceiver安全問題

Android 之使用LocalBroadcastManager解決BroadcastReceiver安全問題

編輯:關於Android編程

在Android系統中,BroadcastReceiver的設計初衷就是從全局考慮的,可以方便應用程序和系統、應用程序之間、應用程序內的通信,所以對單個應用程序而言BroadcastReceiver是存在安全性問題的,相應問題及解決如下:

1、當應用程序發送某個廣播時系統會將發送的Intent與系統中所有注冊的BroadcastReceiver的IntentFilter進行匹配,若匹配成功則執行相應的onReceive函數。可以通過類似sendBroadcast(Intent, String)的接口在發送廣播時指定接收者必須具備的permission。或通過Intent.setPackage設置廣播僅對某個程序有效。

2.  當應用程序注冊了某個廣播時,即便設置了IntentFilter還是會接收到來自其他應用程序的廣播進行匹配判斷。對於動態注冊的廣播可以通過類似registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)的接口指定發送者必須具備的permission,對於靜態注冊的廣播可以通過android:exported="false"屬性表示接收者對外部應用程序不可用,即不接受來自外部的廣播。

 


上面兩個問題其實都可以通過LocalBroadcastManager來解決:

  

Android v4 兼容包提供android.support.v4.content.LocalBroadcastManager工具類,幫助大家在自己的進程內進行局部廣播發送與注冊,使用它比直接通過sendBroadcast(Intent)發送系統全局廣播有以下幾點好處。

1    因廣播數據在本應用范圍內傳播,你不用擔心隱私數據洩露的問題。

2    不用擔心別的應用偽造廣播,造成安全隱患。

3    相比在系統內發送全局廣播,它更高效。

其使用方法也和正常注冊廣播類似:

 

 LocalBroadcastManager mLocalBroadcastManager;  
  BroadcastReceiver mReceiver;  


 IntentFilter filter = new IntentFilter();  
 filter.addAction("test");  

<PRE class=java name="code"> mReceiver = new BroadcastReceiver() {  
            @Override  
            public void onReceive(Context context, Intent intent) {  
                if (intent.getAction().equals("test")) {  
                    //Do Something
                } 
            }  
        };  </PRE> mLocalBroadcastManager.registerReceiver(mReceiver, filter);
<PRE></PRE>
<P></P>
<PRE></PRE>
當然,和正常廣播一樣,也要在對應的生命周期中反注冊掉:
<P></P>
<P></P>
<P></P>
<PRE class=java name="code"> @Override
protected void onDestroy() {

   super.onDestroy();

   mLocalBroadcastManager.unregisterReceiver(mReceiver);

} </PRE>
<P></P>
<PRE></PRE>
<PRE></PRE>
<PRE></PRE>

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved