广播消息是android中的用来进行通知的消息。便于进行系统级别的消息通知或者自定义的消息通知。发送广播后,注册该广播的广播接收器(broadcast receiver)就可以接收该广播,然后进行对应的业务操作。
标准广播(无序广播)
这是一种完全异步执行的广播,发出广播后,所有的广播接收器几乎都会在同一时刻接收到该条广播。这种广播效率较高,但无法被拦截。有序广播
对应无序广播,有序广播则是一种依次被接收的广播。广播接收器可以设置优先级,优先级较高的就会先收到该广播,然后可以设定是否可以拦截。如果不拦截,该条广播就会继续往下一个优先级较高的广播接收器传递。如果拦截,该广播就不继续传递,后边的广播接收器就再也收不到该广播了。
广播可以分为系统级广播(如手机开机,电池电量发生变化等)和程序内自定义广播。
发送一条广播:
Intent intent = new Intent("com.example.mj.FORCE_OFFLINE");
sendBroadcast(intent);
sendOrderedBroadcast(intent,null);//发送有序广播
广播接收器的注册:
- 动态注册
- 指在代码中进行注册
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
//intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//系统网络变化广播
intentFilter.addAction("com.example.mj.FORCE_OFFLINE");//自定义广播
OffLineReceiver offLineReceive = new OffLineReceiver();
registerReceiver(offLineReceiver,intentFilter);
}
class OffLineReceiver extends BroadcastReceiver{
@Override
public void onReceive(final Context context, Intent intent) {
//todo
//abortBroadcast()//拦截有序广播
}
}
- 静态注册
- 指在AndroidManifest.xml文件中进行注册。
<receiver
android:name=".OffLineReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
//intent- filter android:prioty> 有序广播的设置优先级
<action android:name="com.example.mj.OffLineReceiver"/>
</intent-filter>
</receiver>
*在广播接收器的onReceive()方法中,不能做耗时操作。
- 本地广播
由于一般的广播既可以被别的应用程序接收到,自己的应用程序也可以接收到别的程序的广播,容易引起数据的不安全问题。所以引用了本地广播的机制。使用本地广播,就可以使广播只在本应用程序内传播和接收。
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
Intent intent = new Intent("com.example.mj.FORCE_OFFLINE");
localBroadcastManager.sendBroadcast(intent);