广播:BroadcastReceiver,是安卓四大组件之一
一、使用广播进行传值
使用广播要进行注册:
1.静态注册,在清单文件注册
2.动态注册,在使用的时候注册
静态注册
<receiver android:name=".com.Receiver1">
<intent-filter android:priority="1000">
<action android:name="R1" />
</intent-filter>
</receiver>
动态注册
private void regeister() {
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction(".com.Receiver1");
//注册:给这个Activity注册
registerReceiver(receiver,intentFilter);
}
//在视图销毁的时候解除注册
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);//解除注册
}
发送广播
发送类型 | 作用 |
---|---|
有序广播 | 通过 priority优先级 属性来觉定谁先接收 |
无序广播 | 广播发出,所有注册者同时接收 |
//点击按钮发送广播
button1=findViewById(R.id.btn1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction("R2");
Bundle bundle=new Bundle();
bundle.putString("msg","哈哈哈哈哈");
intent.putExtra("msg1",bundle);
// sendOrderedBroadcast(intent,null);//有序,发送给Receiver1
sendBroadcast(intent); //无序
}
});
接收者
//接收者1
public class Receiver1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if("R1".equals(action)){
Bundle bundle = intent.getBundleExtra("msg1");
String msg=bundle.getString("msg");
bundle.putString("msg2","你笑啥");
//如果是短信 或者电话,可以通过键 来监听 收到短信
abortBroadcast();//在这里终止广播就代表拦截了短信
setResultExtras(bundle);//
Log.d("广播1", "收到消息: "+msg);
}
}
//接收者2
public class Receiver2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if("R1".equals(action)){
Bundle bundle = getResultExtras(true);
String msg2 = bundle.getString("msg2");
setResultExtras(bundle);
Log.d("广播2", "收到消息: "+msg2);
}
}
}
二、使用框架EventBus
导入依赖 EventBus
implementation ‘org.greenrobot:eventbus:3.1.1’
注册
EventBus.getDefault().register(this);//注册
EventBus.getDefault().unregister(this);//解除注册
发送
EventBus.getDefault().postSticky ("要发送的消息");
接收
@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
public void Event(String msg) {
//msg就是拿到接收的数据
textView.setText(msg);
}