(以下内容是阅读郭霖大神的《第一行代码》后自己总结的)
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了。