广播,顾名思义,即是有人要发广播,有人在收听广播
我们在使用的时候,难免会遇到信息在不同页面之间相互传递的情况,一般来说我们会在页面跳转的时候将值传递过去,然后被传递的页面在onResume或是onCreate的时候再把值获取出来。但有些时候我们并不知道将要何时,将值传到何地(哪个页面)的时候,广播将会是一个不错的选择。
广播分为注册,发送,接收,三部分。
注册:
注册分为动态注册与静态注册两种,不管是哪一种,对广播的发送和接收都没有影响。
静态注册:
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="BROADCAST_ACTION" />
</intent-filter>
</receiver>
这里有两个基本属性,receiver的name是接收器的类的名字,action的name可以看作是这条广播自身的名字,在接收器中可以通过action来识别
动态注册也同样:
MyReceiver myReceiver;
myReceiver = new myReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("BROADCAST_ACTION");
registerReceiver(myReceiver, intentFilter);
声明了接收器的类,然后为他增加一个action的名字作为标识,然后注册
值得注意的是,动态注册的广播在使用完(或是页面的销毁的时候)需要手动进行销毁,否则会有广播泄露,在下一次不能再次接收到这个广播。
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
发送:
Intent intent = new Intent();
intent.putExtra("key", "动态注册");
intent.setAction("BROADCAST_ACTION");
sendBroadcast(intent);
通过Intent传递信息,在传递的时候指定Action名称,并通过putExtra传递值的信息。
接收:
继承一个BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "广播进来了" + " action名字是:" + intent.getAction() + " key值是:" + intent.getExtras().getString("key"), Toast.LENGTH_SHORT).show();
}
}
通过intent可以获取到action与key的值,
一般情况下可以用switch筛选不同的action来区分广播并进行操作。