使用LocalBroadcastManager解決BroadcastReceiver安全問題

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

一、當應用程序發送某個廣播時系統會將發送的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    相比在系統內發送全局廣播,它更高效。get

相關文章
相關標籤/搜索