代码注册时可以将广播接收者作为一个内部类写在Activity中,也可以重新写一个类继承自BroadCastReceiver,需要用代码注册(注册广播可以写在任意的地方,只有注册的广播接收者才能收到对应的广播),比如在 Activity 中的 onCreate 或者 onResume 中注册广播接收者,在 onDestory 中注销广播接收者,这种注册方式也叫动态注册。这种方式可以理解为通过代码注册的广播是和注册者关联在一起的。
同样,先创建 MyReceiver03 这样一个广播接收者
对 onCreate方法覆写,为 MyReceiver03 动态注册,向意图过滤器中添加action (同一频道) 属性, 通过 registerReceiver方法,添加 MyReceiver03的对象 和 意图过滤器。
动态注册时,为节省系统资源,不让广播接收者时刻去监听,可以注销。覆写 onDestroy() 方法,通过 unregisterReceiver 去注销 MyReceiver03
退出时,注销 MyReceiver03
核心代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 动态注册广播3 MyReceiver03
// 获得 MyReceiver03的对象
myReceiver03 = new MyReceiver03();
// 创建意图过滤器
IntentFilter intentFilter = new IntentFilter();
// 向意图过滤器中添加action属性
String action = MY_ACTION;
intentFilter.addAction(action);
// 动态注册
registerReceiver(myReceiver03,intentFilter);
}
// Activity销毁时,注销广播
@Override
protected void onDestroy() {
super.onDestroy();
// 注销
unregisterReceiver(myReceiver03);
Toast.makeText(this,"myReceiver03广播被注销了",Toast.LENGTH_SHORT).show();
}