(以下内容是阅读郭霖大神的《第一行代码》后自己总结的)
1、概述
广播是Android的四大组件之一。
Android的广播机制十分灵活。
2、发送广播
如上图Android的广播主要分为两类:标准广播和有序广播。
所有的广播接收器都可以接收到标准广播,而且他们的接收几乎是在同一时刻。这意味着标准广播的效率很高,但无法被截断。
在接收有序广播时,广播接收器是由先后顺序的,优先级高的接收器先接收到广播,并且有权对该广播截断,不让后续接收器接收到。
发送标准广播和有序广播的方式非常简单。
//发送标准广播
sendBroadcast.setOnClickListener(new View.onClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent("com.example.broadcastTest.MY_BROADCAST");
sendBroadcast(intent);
}
});
//发送有序广播
sendBroadcast.setOnClickListener(new View.onClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent("com.example.broadcastTest.MY_BROADCAST");
sendOrderedBroadcast(intent,null);
}
});
下图是Android API中对sendBroadcast()和sendOrderedBroadcast()的注解。
3、接收广播
当然,发送广播后没有接收器也是白搭。
3.1 创建接收器
创建广播接收器很简单,只需要新建一个类,让它继承BroadcastReceiver,并重写父类中的onReceive()方法就可以了。
//创建一个广播接收器
public class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context,Intent intent){
Toast.makeText(context,"Network change !",
Toast.LENGTH_SHORT).show();
}
}
3.2 注册广播接收器
当然,只创建广播接收器是没有用的。广播接收器还需要注册,表示它能够接收到哪种广播。
接收器的注册分为动态注册和静态注册。
动态注册则是在代码中完成注册。静态注册是在AndroidManifest.xml中注册。
3.2.1 动态注册
动态注册的广播需要程序启动才能开始接收广播。
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter(); //
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//
networkChangeReceiver = new NetworkChangeReceiver();//
registerReceiver(networkChangeReceiver,intentFilter);//
}
动态注册的接收器,一定要取消注册。
@Override
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
下面是registerReceiver()和unregisterReceiver()在Android API中的说明。
3.2.2 静态注册
静态注册则不需要程序启动,手机开启就能接收到广播。静态注册则是在AndroidManifest.xml中申明。
<receiver android:name=".NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_ CHANGE" />
</intent-filter>
</receiver>
4 总结
总结而言,运用Android的广播机制,我们需要做到以下几点
如果监听自定义广播,
1、使用sendBroadcast()或sendOrderedBroadcast()方法,发送定义的广播
2、创建广播接收器,继承自BroadcastReceiver(),并重写onReceive()方法。在onReceive()方法中实现接收到广播后的响应动作。
3、注册广播接收器,让广播接收器能接收到广播。广播接收器可以动态注册或者静态注册。动态注册需要取消注册。
如果是监听系统广播,上面三步我们只需要做后面两步就Ok了。