android 开发中,广播是经常会用到的
我来记录一下动态注册广播的简单用法
一、自定义一个广播+接收广播
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String msg = intent.getStringExtra("message");
if (msg.equals("pay")) {
Toast.makeText(MainActivity.this, "收到广播", Toast.LENGTH_SHORT).show();
}
}
}
MyBroadcastReceiver 是我自定义的一个广播类,它可以是内部类也可以是外部类,继承 BroadcastReceiver
onReceive方法里写的就是收到广播之后的操作
同时可以获取发送广播时传递的参数 intent.getStringExtra("message");
二、动态注册广播
//广播
private MyBroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new MyBroadcastReceiver();
// 动态注册广播接受者
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("wechat.pay.Broadcast");//要接收的广播
registerReceiver(receiver, intentFilter);//注册接收者
}
通过 registerReceiver() 方法,传入MyBroadcastReceiver和IntentFilter,动态注册一个广播
MyBroadcastReceiver 就是上面自定义的广播类
IntentFilter 设置了一个“暗号”,用于区分不同的广播
三、发送广播
Intent intent=new Intent("wechat.pay.Broadcast");
intent.putExtra("message","pay");
sendBroadcast(intent);
通过 sendBroadcast()方法发送广播
Intent 设置了一个“暗号”,用于区分不同的广播,与动态注册的“暗号”相对应
同时,Intent也可以传递参数 intent.putExtra("message","pay");
四、销毁广播
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
在哪个Activity或Fragment里注册的广播,就在哪里销毁
不销毁的话可能会造成内存泄漏