Android中使用的廣播通常是系統全局廣播,即發出的廣播能夠被其餘任何應用程序接收到,而且咱們也能夠接收來自於其餘任何應用程序的廣播。這樣就很容易會引發安全性的問題,好比說咱們發送的一些攜帶關鍵性數據的廣播有可能被其餘的應用程序截獲,或者其餘的程序不停地向咱們的廣播接收器裏發送各類垃圾廣播。 安全
爲了可以簡單地解決廣播的安全性問題,Android 引入了一套本地廣播機制,使用這個機制發出的廣播只可以在應用程序的內部進行傳遞,而且廣播接收器也只能接收來自本應用 程序發出的廣播,這樣全部的安全性問題就都不存在了。 另外發送本地廣播比發送系統全局廣播更加高效。ide
本地廣播的用法並不複雜,主要就是使用了一個 LocalBroadcastManager 來對廣播進行管理,並提供了發送廣播和註冊廣播接收器的方法。看下面的代碼:this
1 public class MainActivity extends Activity { 2 private IntentFilter intentFilter; 3 private LocalReceiver localReceiver; 4 private LocalBroadcastManager localBroadcastManager; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_main); 10 11 //獲取LocalBroadcastManager 12 localBroadcastManager = LocalBroadcastManager.getInstance(this); 13 14 Button button = (Button) findViewById(R.id.button); 15 button.setOnClickListener(new View.OnClickListener() { 16 @Override 17 public void onClick(View v) { 18 Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST"); 19 localBroadcastManager.sendBroadcast(intent); // 發送本地廣播 20 } 21 }); 22 23 //註冊廣播接收器 24 intentFilter = new IntentFilter(); 25 intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST"); 26 localReceiver = new LocalReceiver(); 27 localBroadcastManager.registerReceiver(localReceiver, intentFilter); 28 } 29 30 @Override 31 protected void onDestroy() { 32 super.onDestroy(); 33 34 //註銷廣播接收器 35 localBroadcastManager.unregisterReceiver(localReceiver); 36 } 37 38 /** 39 * 自定義廣播接收器 40 */ 41 class LocalReceiver extends BroadcastReceiver { 42 @Override 43 public void onReceive(Context context, Intent intent) { 44 Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show(); 45 } 46 } 47 }
另外還有一點須要說明,本地廣播是沒法經過靜態註冊的方式來接收的。其實這也徹底 能夠理解,由於靜態註冊主要就是爲了讓程序在未啓動的狀況下也能收到廣播,而發送本地 廣播時,咱們的程序確定是已經啓動了,所以也徹底不須要使用靜態註冊的功能。spa