BroadcastReceiver
- BroadcastReceiver(广播)是Android四大组件之一
- 广播分为发送方和接收方,就算没有接收方,发送方也会发送数据
- 广播可以实现跨多个页面的数据通信
- 广播可以实现跨进程间的数据通信
广播的分类
无序广播:
不管有多少接收者,一旦发出了无序广播,所有监听此广播的接收者都能接收到。
有序广播:
按接收者的优先级。逐一传递。优先级最高的接收者先接收,如果不终止此广播,再往下传递。
粘滞广播:
当广播发出后,如果系统没有接收者,会一直等待,直到有接收者接收为止。
广播的注册方式
1、静态注册———在AndroidManifest中注册receiver
2、动态注册———通过在Activity中写代码实现广播注册
静态注册无序广播
广播的注册方式需要在接收方的项目中进行注册
进行静态注册需要在AndroidManifest进行receiver注册
//继承BroadcastReceiver子类的类名
<receiver android:name=".GostBroadcast">
<intent-filter>
//name中是发出的广播频道
<action android:name="com.send"/>
</intent-filter>
</receiver>
我们通过广播实现进程间的数据通信,也就是两个项目之间的通信
接收方要新建类继承BroadcastReceiver,实现onReceive抽象方法,此方法写在接收方中
public class GostBroadcast extends BroadcastReceiver {
private String TAG="GostBroadcast";
@Override
public void onReceive(Context context, Intent intent) {
//通过Toast打印
Toast.makeText(context, "收到请回答GostBroadcast", Toast.LENGTH_SHORT).show();
Log.d(TAG, "广播++++++++++++++++++++++++++++++++++++");
}
}
发送方Activity(另一个项目中)
public class BroadcastActivity extends AppCompatActivity {
//定义一个按钮,发送广播
private Button broadBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//绑定id,设置监听事件
setContentView(R.layout.activity_broadcast);
broadBtn=findViewById(R.id.broad_btn);
broadBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 发送广播,通过Intent进行广播的启动发送
Intent intent=new Intent("com.send");
sendBroadcast(intent); //进行无序广播时用sendBroadcast()方法
}
});
}
}
动态注册无序广播
广播的注册方式需要在接收方的项目中进行注册
动态注册不需要在AndroidManifest进行receiver注册,只要在Activity中写代码注册
接收方Activity注册
public class BroadBActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broad_b);
// 1. 实例化BroadcastReceiver子类 与 IntentFilter
GostBroadcast mBroadcastReceiver = new GostBroadcast();
IntentFilter intentFilter = new IntentFilter();
// 2. 设置接收广播的类型
intentFilter.addAction("com.send");
// 3. 动态注册:调用Context的registerReceiver()方法
registerReceiver(mBroadcastReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
//移除广播接收器
unregisterReceiver(mBroadcastReceiver);
}
}
新建类继承BroadcastReceiver
public class GostBroadcast extends BroadcastReceiver {
private String TAG="GostBroadcast";
@Override
public void onReceive(Context context, Intent intent) {
//通过Toast打印
Toast.makeText(context, "收到请回答GostBroadcast", Toast.LENGTH_SHORT).show();
Log.d(TAG, "广播++++++++++++++++++++++++++++++++++++");
}
}
发送方Activity与静态注册的方法一样
静态注册有序广播
进行静态注册需要在AndroidManifest进行receiver注册,与无序注册不同的是有序广播有优先级,需要在其中加入priority属性设置优先级接收一个int类型,范围是-1000至1000
同时需要写两个继承BroadcastReceiver的类
<receiver android:name=".GostBroadcast">
<intent-filter android:priority="100" >
<action android:name="com.send"/>
</intent-filter>
</receiver>
<receiver android:name=".SecondBroadcast">
<intent-filter android:priority="1000" >
<action android:name="com.send"/>
</intent-filter>
</receiver>
发送方Activity(另一个项目中)
public class BroadcastActivity extends AppCompatActivity {
//定义一个按钮点击发送广播
private Button broadBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broadcast);
//绑定id与设置监听事件
broadBtn=findViewById(R.id.broad_btn);
broadBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent("com.send");
//有序广播需要用sendOrderedBroadcast()方法发送
sendOrderedBroadcast(intent,null);
}
});
}
}
新建类继承BroadcastReceiver,有序广播需要建立两个类来比较
public class GostBroadcast extends BroadcastReceiver {
private String TAG="GostBroadcast";
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "收到请回答GostBroadcast", Toast.LENGTH_SHORT).show();
Log.d(TAG, "广播++++++++++++++++++++++++++++++++++++");
//终止此广播,不在传递下去
abortBroadcast();
}
}
动态注册有序广播
注册receive
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broad_b);
// 1. 实例化BroadcastReceiver子类 & IntentFilter
GostBroadcast mBroadcastReceiver = new GostBroadcast();
SecondBroadcast secondBroadcast=new SecondBroadcast();
IntentFilter intentFilter1 = new IntentFilter();
IntentFilter intentFilter2 = new IntentFilter();
// 2. 设置接收广播的类型
intentFilter1.addAction("com.send");
//运用setPriority()方法设置优先级关系
intentFilter1.setPriority(1000);
intentFilter2.addAction("com.send");
intentFilter2.setPriority(1000);
// 3. 动态注册:调用Context的registerReceiver()方法
registerReceiver(mBroadcastReceiver, intentFilter1);
registerReceiver(secondBroadcast, intentFilter2);
}
@Override
protected void onDestroy() {
super.onDestroy();
//移除广播接收器
unregisterReceiver(mBroadcastReceiver);
unregisterReceiver(secondBroadcast);
}
}
动态注册方法中也需要新建两个类继承BroadcastReceiver,同上述静态加载有序广播的方法一样
发送方Activity(另一个项目中)
public class BroadcastActivity extends AppCompatActivity {
private Button broadBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broadcast);
broadBtn=findViewById(R.id.broad_btn);
broadBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent("com.send");
//有序广播需要用sendOrderedBroadcast()方法发送
sendOrderedBroadcast(intent,null);
}
});
}
}
静态注册与动态注册的比较

上述就是我对BroadcastReceiver(广播)的理解与使用,希望能对大家有用。

本文详细介绍了Android中的BroadcastReceiver(广播)机制,包括广播的分类、注册方式及如何实现跨页面和跨进程的数据通信。文中还提供了静态注册和动态注册广播的具体步骤,并对比了无序广播与有序广播的区别。
252

被折叠的 条评论
为什么被折叠?



