-
发送标准广播
-
发送有序广播
-
有序广播的先后顺序(在注册广播接收器时,通过过滤器的priority属性设置优先级)
-
截断有序广播(在自定义的广播接收器类中的onReceive()方法中,调用abortBroadcast();即可截断广播)
注意,要保证截断广播,需保证自己优先级高,先接收了此有序广播
-
本地广播(只有动态注册)
发送广播,利用Intent进行传递
接收广播,就是广播接收器(BroadcastReceiver)(如何注册请看:BroadcastReceiver广播接收器动态注册、静态注册)
-
发送标准广播:
1. 基本思路:
①:借助Intent传入自定义广播的action值,再由context的sendBroadcast(intent)发送标准广播
②:然后就是注册一个BroadCastReceiver,接收这个广播(注册方法:BroadcastReceiver广播接收器动态注册、静态注册)
2. 简单代码:
①:这里将发送广播的代码写在了按钮里,点击按钮发送广播:
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//通过Intent传递广播,参数为传入要发送的自定义广播的值
Intent intent=new Intent("com.example.broadcast.MY_BROADCAST");
sendBroadcast(intent);//通过context的sendBroadcast发送(标准)广播
}
});
②注册:这里用了静态注册(即在AndroidMainfest.xml文件中用<receiver></receiver>注册)
<receiver
android:enabled="true"
android:exported="true"
android:name=".StandardBroadcastReceiver">
<intent-filter ><action android:name="com.example.broadcast.MY_BROADCAST"/> </intent-filter>
</receiver>
-
发送有序广播
1. 基本思路:
①:借助Intent传入自定义广播的action值,再由context的sendOrderedBroadcast(intent , 权限)发送有序广播
②:然后就是注册一个BroadCastReceiver,接收这个广播(注册方法:BroadcastReceiver广播接收器动态注册、静态注册)
2. 简单代码:
①:这里将发送广播的代码写在了按钮里,点击按钮发送有序广播广播:
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//通过Intent传递广播,参数为传入要发送的自定义广播的值
Intent intent=new Intent("com.example.broadcast.MY_BROADCAST");
sendOrderedBroadcast(intent,null);//通过context的sendOrderedBroadcast发送(有序)广播
}
});
②注册:
- 定义广播接收器类,继承BroadcastReceiver,并重写onReceive()
如要,截断有序广播(在自定义的广播接收器类中的onReceive()方法中,调用abortBroadcast();即可截断广播)
public class OrderBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Toast.makeText(context,"received in OrderBroadcastReceiver",Toast.LENGTH_SHORT).show();
/*******************************/
//截断有序广播(在自定义的广播接收器类中的onReceive()方法中,调用abortBroadcast();即可截断广播
abortBroadcast();//截断广播
}
}
- 这里用了静态注册(即在AndroidMainfest.xml文件中用<receiver></receiver>注册):
<receiver
android:name=".OrderBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter><action android:name="com.example.broadcast.MY_BROADCAST"/></intent-filter>
</receiver>
如要,设置有序广播接收顺序,在注册广播接收器时,设置本接收器的priority优先级即可
修改:
<receiver
android:name=".OrderBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter Android:priority="具体优先级">
<action android:name="com.example.broadcast.MY_BROADCAST"/>
</intent-filter>
</receiver>
-
本地广播:(接收器只有动态注册,所以要注销)
本地广播,可以使得发出的广播,只能在本程序内部进行传递,不会被外部接收器接收
且,本程序的广播接收器也只能接收本程序内部的广播,不能接收外部的
- 基本思路:
本地广播,使用LocalBroadcastManager类来对广播进行管理,并提供了,
发送广播的方法:LocalBroadcastManager manager.sendBroadcast(intent),来发送本地广播
注册广播接收器的方法:LocalBroadcastManager manager.registerReceiver(自定义接收器类实例,intentFilter过滤器)
注销广播接收器:LocalBroadcastManager manager.unregisterReceiver(自定义接收器类实例)