通过在配置文件里面注册广播属于常驻型广播,意思就是即便你应用程序结束,一旦有了对应的广播过来,其还是会被激活;而在代码里注册的广播则是非常驻型广播,比如在oncreate方法里面注册一个广播,那么在ondestroy里就可以BroadcastReceiver.abortBroadcast(),比如注册一个监听SD卡的广播。
之前有一个概念经常混淆,就是发送广播sendBroadCast或sendOrderBroadCast是要发送自己定义的广播时,才用到的,如果是系统的广播,根本不需要用到它们,系统的广播,我们只需要注册广播监听,如定义intent_filter监听就可以了,所以abortBroadcast终止广播就更用不到了。
1.常驻型广播
常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接受到,
他的注册方式就是在你的应用程序中的AndroidManifast.xml进行注册。通常说这种方式是静态注册
下面是配置例子
Java代码
1. <!-- 桌面 -->
2. <receiverandroid:name=".widget.DeskWidgeWeather">
3. <meta-dataandroid:name="android.appwidget.provider"android:resource="@xml/widget_weather_provider" />
4. <intent-filter>
5. <actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE"/>
6. <action android:name="action_weather"/>
7. </intent-filter>
8. lt;/receiver>
2.非常驻型广播
当应用程序结束了,广播自然就没有了,比如你在activity中的onCreate或者onResume中注册广播接收器
在onDestory中卸载广播接收器。这样你的广播接收器就一个非常驻型的了。这种也叫动态注册。
比如写一个监听SDcard状态的广播接收器
Java代码
1. SdcardStateChanageReceiversdcardStateReceiver;
2. @Override
3. protectedvoid onCreate(Bundle savedInstanceState)
4. {
5. super.onCreate(savedInstanceState);
6. IntentFilter filter = new IntentFilter();
7. filter.addAction(Intent.ACTION_MEDIA_REMOVED);
8. filter.addAction(Intent.ACTION_MEDIA_EJECT);
9. filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
10. filter.addDataScheme("file");
11. sdcardStateReceiver = new SdcardStateChanageReceiver();
12. registerReceiver(sdcardStateReceiver,filter);
13. }
14. @Override
15. protectedvoid onDestroy(){
16. unregisterReceiver(sdcardStateReceiver);
17. }
18. classSdcardStateChanageReceiver extendsBroadcastReceiver{
19.
20. @Override
21. public void onReceive(Context context, Intent intent)
22. {
23. Stringstate=android.os.Environment.getExternalStorageState();
24. System.out.println("SDCard 发生改变! 状态:"+state);
25. //checkSDCard();
26. }
27. public void checkSDCard(){
28. Stringstate=android.os.Environment.getExternalStorageState();
29. System.out.println(state);
30. if(state.equals(android.os.Environment.MEDIA_REMOVED ) || state .equals(android.os.Environment.MEDIA_UNMOUNTED)){
31. System.out.println("SDCard 已卸载!");
32. }
33. }
34. }