如何在应用中发送自己定义的广播Broadcast

广播是一种可以跨进程的通信方式。


 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();

注意:本地广播无法通过静态注册的方式来接收。

你可能感兴趣的:(android)