广播主要分为两种:标准广播和有序广播

标准广播:发出之后,所有的广播接收器都可以同时接收到该消息,没有先后顺序
有序广播:同一时刻只有一个接收器接收该消息,该Receiver执行完毕之后,才会被传送到下一个Receiver。优先级高的接收器可以截停广播,使后续的接收器接收不到该广播

注册方式:
1:动态注册,顾名思义,是在代码中注册
因为接收器主要监听信息是action里的内容,该部分是放在intent-filter里的,动态注册的顺序如下:

private IntentFilter intentFilter;
private MyReceiver myReceiver;

intentFilter= new IntentFilter();
intentFilter.addAction("This_is_myaction");
myReceiver= new MyReceiver();
registerReceiver(myReceiver, intentFilter);

2:静态注册。在manifest文件里注册:

<receiver android:name="com.example.broadcasttest.myReceriver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter >
 </receiver>

两种注册方式的主要区别:动态注册的方式需要在程序启动以后才生效。所以,程序启动之前发出的广播,该程序是监听不到的。例如开机启动广播,必须用静态注册的方式。
而静态注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行

广播类型:
1:标准广播:
发送广播:

//发送包含信息的广播
Intent intent = new Intent("This_is_myaction");
intent.putExtra("msg1", "  下雨啦");
sendBroadcast(intent);
//接收广播
public void onReceive(Context context,Intent intent){
    String msg = intent.getStringExtra("msg1");
    Toast.makeText(context, msg , Toast.LENGTH_SHORT).show();
}

广播也是通过Intent来传送信息的,Receiver所监听的action信息,就是在Intent里定义的。同时,intent也可以像Activity一样来传递内容。
如果要在接收里启动一个Activity,代码如下:

//因为是在广播接收器里启动活动,所以必须在intent里添加该flag,启动活动也需要用 context
//该context是onReceive函数传入的

Intent intent = new Intent(context,LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

2:有序广播:
与标准广播在代码上的区别主要在发送广播上:
sendBroadcast(intent,null);
第二个参数是一个权限参数,如果为null则表示不要求接收者声明指定的权限,如果不为null,则表示接收者若要接收此广播,需声明指定权限。
另外, 注册Receiver时,会有权重的设置

<intent-filter android:priority="100">

数值越高,接收广播越靠前,并且可以并接收到的内容进行加工再传递到下一个接收器

public class FirstReceiver extends BroadcastReceiver {  
10.      
11.    private static final String TAG = "OrderedBroadcast";  
12.      
13.    @Override  
14.    public void onReceive(Context context, Intent intent) {  
15.        String msg = intent.getStringExtra("msg");  
16.        Log.i(TAG, "FirstReceiver: " + msg);  
17.          
18.        Bundle bundle = new Bundle();  
19.        bundle.putString("msg", msg + "@FirstReceiver");  
20.        setResultExtras(bundle);  
21.    }  
22.  
23.}
public class SecondReceiver extends BroadcastReceiver {  
02.      
03.    private static final String TAG = "OrderedBroadcast";  
04.      
05.    @Override  
06.    public void onReceive(Context context, Intent intent) {  
07.        String msg = getResultExtras(true).getString("msg");  
08.        Log.i(TAG, "SecondReceiver: " + msg);  
09.          
10.        Bundle bundle = new Bundle();  
11.        bundle.putString("msg", msg + "@SecondReceiver");  
12.        setResultExtras(bundle);  
13.    }  
14.  
15.}
public class ThirdReceiver extends BroadcastReceiver {  
02.      
03.    private static final String TAG = "OrderedBroadcast";  
04.      
05.    @Override  
06.    public void onReceive(Context context, Intent intent) {  
07.        String msg = getResultExtras(true).getString("msg");  
08.        Log.i(TAG, "ThirdReceiver: " + msg);  
09.    }  
10.  
11.}
public void send(View view) {  
02.    Intent intent = new Intent("android.intent.action.MY_BROADCAST");  
03.    intent.putExtra("msg", "hello receiver.");  
04.    sendOrderedBroadcast(intent, NUll);  
05.}

如果想截停广播,调用代码abortBroadcast即可
以上是广播的主要内容。目前为止所接触到的是全局广播,即发出的广播可以被系统中的任意程序接收到。我们也可以接收来自于任意程序的广播,此外还有一种,在程序内部传送的
本地广播
用法跟全局广播基本一样,主要是用到一个LocalBroadcastManager来对广播进行管理

//发送广播:
private LocalBroadcastManager localBroadcastManager;
localBroadcastManager = LocalBroadcastManager.getInstance(this);
localBroadcastManager.sendBroadcast(intent);
//注册广播:
intenFilter.addAction("This_is_Action");
myLocalReceiver = new MyLocalReceiver();
localBroadcastManager.registerReceiver(myLocalReceiver,intenFilter);

还有一点需要注意:
动态注册的Receiver,声明周期跟随Activity,通常需要在Destroy里取消注册。
unregisterReceiver(myReceiver)