广播是一种可以跨进程的通信方式。
1、对广播的理解可以类比上学时听到的校园大喇叭。只要喇叭一响,在校园中的我们就能接受到喇叭传来的信息。
2、android中广播可以大致分为两类:标准广播和有序广播
首先,广播都是通过Intent来发送的,且应该有相应的接收器来执行接收后的动作。为了将广播和接收器做到一一对应,需要定义具有唯一性的action字符串。
标准广播的发送:
这种广播最简单的发送方式就是定义一个Intent,传入相应的动作,再发送出去就可以了。
例如:Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);
另外,我们还可以在Intent中携带一些数据传递给广播接收器。
有序广播的发送:
只要把上面的sendBroadcast()函数改为sendOrderedBroadcast(Intent, String)发送的就是有序广播了(String是一个与权限相关的字符串,一般使用方法是sendOrderedBroadcast(Intent, null))。
那有序体现在哪儿呢?
体现在注册是广播接收器的Priority属性。
priority范围:Integer.MIN~Integer.MAX, 系统注册Receiver的IntentFIlter的priority的范围-1000~1000。
也就是说接收器的优先级决定了他们接受到这个广播的先后顺序。数值越大优先级就越高。
而且,接收器在其对应的onReceive()函数中可以使用abortBroadcast();函数来截断广播的传递。使得其后的广播接收器无法获取到这个广播。
本地广播的发送:
来源:
说到本地广播,它的出现主要是为了解决广播的安全性问题。普通的广播,不仅自己的应用能接受,其它的应用也能接受。这就会有安全问题。比如,其它应用窃取我们广播发出的数据信息,或者不断的向我们的程序中注册的某个广播接收器发送广播。
为了解决上述问题,android引入了一套本地广播机制,这种广播只能在本应用内部传递。而且对应方式注册的接收器也只能接受来自本应用发出的广播。
方法:
只要在上述广播的基础上增加一个LocalBroadcastManager就可以了。
实例获取方法:LocalBroadcastManager localBroadcastManager=LocaBroadcastManager.getInstance(this);
然后,注册和注销广播接收器的时候用:localBroadcastManager.registerReceiver(); localBroadcastManager.unregisterReceiver();
发送广播的时候调用:localBroadcastManager.sendBroadcast();
注意:本地广播无法通过静态注册的方式来接收。