一、什么是广播?
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。
广播的注册方法:
静态注册和动态注册
广播的分类:
1.无序广播(普通广播)
所有监听该广播接受者都可以监听到该广播
同级别接收先后顺序是随机的(无序)
级别低的后收到广播
接收器不能截断广播的继续传播,也不能处理广播
同级别动态注册高于静态注册
2.有序广播
按照接收者的优先顺序来接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大优先级越高,可以终止广播的继续传播,接受者可以修改intent的内容。
同级别接收顺序是随机的
级别低的后收到
能截断广播的继续传播,高级别的广播接收器接收广播后能决定时候截断。
能处理广播
同级别动态注册高于静态注册
3.粘滞广播
不能处理结果给下一个接收者,无法终止广播。
一直存在
可以先发送广播,再注册接收器
需要在清单文件添加android.permission.BROADCAST_STICKY权限
二、静态注册发送无序广播实例:
首先布置发送方代码。创建一个Activity,修改其xml、java代码:
<Button
android:id="@+id/send_btn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="send"
/>
main.java:
在按钮的点击事件中写发送广播
public class Main1Activity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
button=findViewById(R.id.send_btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//发送广播
Intent intent=new Intent("com.test.project.broadcasta");
sendBroadcast(intent);
}
});
}
}
接收方代码:
1.创建一个新的工程
2.新建一个类,继承BroadcastReceiver
3.实现onReceive方法
4.在AndroidManifest.xml里面注册
代码如下:
public class Reciveinfo extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "1111111111", Toast.LENGTH_SHORT).show();
}
}
AndroidManifest注册代码:
<receiver android:name=".Reciveinfo">
<intent-filter>
<action android:name="com.test.project.broadcasta"/>
</intent-filter>
</receiver>
三、静态注册发送有序广播实例:
1.需要将AndroidManifest里的代码做以下修改:
添加priority属性,设置广播的优先级别
<receiver android:name=".Reciveinfo">
<intent-filter android:priority="1000">
<action android:name="com.test.project.broadcasta"/>
</intent-filter>
</receiver>
2.将发送端main.java代码改为:
发送方法改为sendOrderedBroadcast
public class Main1Activity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
button=findViewById(R.id.send_btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//发送广播
Intent intent=new Intent("com.test.project.broadcasta");
sendOrderedBroadcast(intent,null);
}
});
}
}
其余代码同上
四.动态注册发送无序广播实例:
首先布置发送方代码:
首先布置发送方代码。创建一个Activity,修改其xml、java代码:
<Button
android:id="@+id/send_btn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="send"
/>
main.java:
在按钮的点击事件中写发送广播:
public class Main1Activity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
button=findViewById(R.id.send_btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//发送广播
Intent intent=new Intent("com.test.project.broadcasta");
sendOrderedBroadcast(intent,null);
}
});
}
}
接收方代码:
1.创建两个新的工程
2.各新建一个 类,继承BroadcastReceiver
3.实现onReceive方法
4.在各自的MainActivity中,实现动态注册
创建一个IntentFilter对象。
使用IntentFilter对象的setAction方法添加一个监听对象
使用registerReceiver(Broadcastreceiver,intentFilter)实现这个广播接收
在onDestroy里面使用unregisterReceiver结束当前广播(unregisterReceiver)
代码如下:
public class Main1Activity extends AppCompatActivity {
private Reciveinfo reciveinfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
//重写自己的类
reciveinfo=new Reciveinfo();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("com.test.project.broadcasta");
registerReceiver(reciveinfo,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(reciveinfo);
}
}
五.动态注册发送有序广播实例:
只需要在接收方main.java 代码中做以下修改即可,其余同上:
在各自的接收方main.java 中添加添加priority属性,设置广播的优先级别即可
public class Main1Activity extends AppCompatActivity {
private Reciveinfo reciveinfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
reciveinfo=new Reciveinfo();
IntentFilter intentFilter=new IntentFilter();
intentFilter.setPriority(-1000);
intentFilter.addAction("com.test.project.broadcasta");
registerReceiver(reciveinfo,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(reciveinfo);
}
}