Android发送和接收自定义广播(动态注册广播)
本文简单的记录一下动态注册广播的方法:三个步骤:1.【创建广播接收器】(就是你的这类广播接收到之后想要干什么);2.【做一个意图的过滤器】(就是要监听是不是你的广播),创建完之后要【注册】;3.【取消注册】一般在onDestroy()里面取消。如果不取消可能会出现内存泄漏(小菜鸟的我不太懂为啥一定要取消注册,于是了解了一下,大...
本文简单的记录一下动态注册广播的方法:
三个步骤:
1.【创建广播接收器】(就是你的这类广播接收到之后想要干什么);
2.【做一个意图的过滤器】(就是要监听是不是你的广播),创建完之后要【注册】;
3.【取消注册】一般在onDestroy()里面取消。 如果不取消可能会出现内存泄漏(小菜鸟的我不太懂为啥一定要取消注册,于是了解了一下,大概的意思就是广播的接收器onReceiver是依附在Activity上的,除了Activity在调用,可能有其他系统服务等在用,当Activity onDestory的时候,由于onReceiver被其他服务调用,于是虽然Activity已经调用onDestory了,但是实际上Activity并没有被回收,这样就有可能会导致内存泄漏的问题)。
最后就是发广播了。
【第一步:首先创建广播接收器】:创建一个内部类MyBroadcastReceiver继承BroadcastReceiver类,重写onReceiver()方法,这个方法的意思就是:当接收到
对应已经注册了的广播,就会执行onReceiver里面的代码。
class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//接收到广播后你想干什么在这里做处理
String action=intent.getAction();
switch (action){
//打开另外一个activity
case "com.example.OPEN_OTHER_ACTIVITY":
Intent intent1=new Intent();
intent1.setClass(MainActivity.this,SecondActivity.class);
MainActivity.this.startActivity(intent1);
break;
//打个Toast
case "com.example.WAKE_UP":
Toast.makeText(context,"WakeUp",Toast.LENGTH_SHORT).show();
break;
}
}
}
那么怎么样才可以知道是不是属于我的广播呢,就时候就要利用意图过滤器intentFilter啦。
【第二步:当然是要新建intentFilter了!】
IntentFilter intentFilterButton=new IntentFilter();
//addAction(字符串)可以理解为添加一种广播的类型;
intentFilterButton.addAction("com.example.OPEN_OTHER_ACTIVITY");
//当然你也可以添加多个...
intentFilterButton.addAction("com.example.WAKE_UP");
myBroadcastReceiver=new MyBroadcastReceiver();
//最后就是注册,将刚才做的接收器实例和过滤器实例放进去;
// 如果系统发出了OPEN_OTHER_ACTIVITY或者WAKE_UP的广播,接收器就会接收到然后执行onReceiver里面的代码
//我想在多种情况下都是执行同一个动作/或者不同动作,就可以用广播(具体回看上面的onReceiver方法里面的代码)
registerReceiver(myBroadcastReceiver,intentFilterButton);
【最后记得取消注册:】
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myBroadcastReceiver);
}
然后就是发送广播了:
//点击button就会发送一条跳到其他Activity的广播
bt_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent("com.example.OPEN_OTHER_ACTIVITY");
sendBroadcast(intent);
// 方式二: mContext.sendBroadcast(new Intent("com.example.OPEN_OTHER_ACTIVITY"));
// ---这种方式就要构造一个context
}
});
以上小Demo就完成了,如果需要源码可以评论。
效果图如下:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)