一、广播接收器
广播接收器可以自由地对自己感兴趣的广播进行注册,这样当有相应的广播发出时,广播接收器就能够收到该广播,并在内部处理相应的逻辑。注册广播的方式一般有两种,在代码中注册和在 AndroidManifest.xml 中注册,其中前者也被称为动态注册,后者也被称为静态注册。
1.动态注册
创建广播接收器:新建一个类继承BroadCastReceiver,并重写父类的onReceive()方法,当有广播发过来时onReceive()就会得到执行,在里面实现我们所需的逻辑就行了。
<span style="white-space:pre"> </span>class MyReceiver extends BroadCastReceiver{
<span style="white-space:pre"> </span> @override
<span style="white-space:pre"> </span> public void onReceive(Context context, Intent intent){
<span style="white-space:pre"> </span> //the deal code
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span>}
创建IntendFilter实例,为它添加所需监听的广播的action,比如需要监听网络变化那就添加<span style="font-family: 'Times New Roman'; font-size: 10pt;">android.net.conn.CONNECTIVITY_CHANGE,因为网络变化时系统就会发出这条广播。调用registerBroadcast()方法进行注册</span>
<span style="font-family: 'Times New Roman'; font-size: 10pt;"><span style="font-family: 'Courier New', Bold; font-size: 9pt;"><strong><span style="white-space:pre"> </span>intentFilter = new IntentFilter();</strong>
<span style="font-size: 9pt;"><strong><span style="white-space:pre"> </span>intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");</strong>
<span style="font-size: 9pt;"><strong><span style="white-space:pre"> </span>myReceiver = new MyReceiver();</strong>
<span style="font-size: 9pt;"><strong><span style="white-space:pre"> </span>registerReceiver(</strong></span></span></span></span></span><span style="font-weight: bold; font-size: 9pt; font-family: 'Courier New', Bold;">myReceiver </span><span style="font-weight: bold; font-family: 'Times New Roman'; font-size: 10pt;"><span style="font-family: 'Courier New', Bold; font-size: 9pt;"><span style="font-size: 9pt;"><span style="font-size: 9pt;"> </span></span></span></span><span style="font-weight: bold; font-size: 9pt; font-family: 'Courier New', Bold;">, intentFilter);</span>
动态注册的广播接收器必须手动取消注册,一般在Activity的onDestroy()方法中通过调用unregisterReceiver()方法实现
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(nmyReceiver);
}
2.静态注册
在AndroidManifest.xml 中注册,程序未启动的情况下也可以接受到广播(动态注册只有程序启动后才能接收广播)。
第一步还是需要新建一个类继承BroadCastReceiver,第二步在AndroidManifest.xml 中将广播接收器的类名注册进去
<receiver android:name=".MyReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
4 </intent-filter>
</receiver>
sendBroadcast(intent);
<intent-filter android:priority="100" >
<action android:name="com.example.broadcasttest.MY_BROADCAST"/>
</intent-filter>
</receiver>