为了便于进行系统级别的消息通知,Android引入了一套类似现实生活中广播的消息机制。
Android 中的每个应用程序都可以对自己感兴趣的广播进行注册,这样程序就只会接收到自己感兴趣的广播内容,这些广播可能来自于系统,来自于其他应用程序。
Android中的广播主要分成两种:标准广播和有序广播。
标准广播是一种完全异步执行的广播,在广播发出之后,所有广播接收器都会在同一时刻接收到这条广播消息。
有序广播是同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接收到这条广播消息。
接收广播系统------广播接收器
注册广播的方式有两种,在代码中注册被叫做动态注册。而在AndroidMainfest.xml中注册则被叫做静态注册。
如何创建一个广播接收器? 我们只需要新建一个类,并且让它继承BroadcastReceiver, 然后重写父类的onReceive()方法。这样当有广播来时,onReceive()方法就会得到执行,我们可以在这个方法里面添加具体的逻辑。
下面我们通过一个例子来了解一下广播接收器的基本用法。
public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @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); } class NetworkChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent){ Toast.makeText(context,"network changes",Toast.LENGTH_SHORT).show(); } } }
首先,我们在MainActivity中定义了一个内部类,让它继承BroadcastReceiver,并且重写了父类的onReceiver()方法。
接着,我们新建一个IntentFilter的实例,并且给它添加了一个值为android.net.conn.CONNECTIVITY_CHANGE的action.
接着我们又实例了一个NetworkChangeReceiver对象。
调用registerReceiver()方法进行注册,将NetworhChangeReceiver的实例和IntentFilter的实例传进去。这样就实现了监听网络变化的功能。
注意,动态注册的广播接收器一定都要取消注册,我们在onDestroy()方法中通过调用unregisterReceiver()方法来实现。