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