定义一个广播接收器

/**
* 广播接受器
*/
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//退出登录
}
}

1、按照定义的方式分类

1.1 静态广播 和 动态广播

android内置了很多广播系统,每个广播都有对应的action.广播发出后被相应的BroadcastReceiver接收。静态广播 和 动态广播的区别在于动态广播activity退出,就收不到了。静态广播只要进程不被杀死就仍能接受到广播,如果进程被杀死,仍希望接收广播,对于自定义的广播,可以通过覆写此flag为FLAG_INCLUDE_STOPPED_PACKAGES,但此时的BroadcastReceiver是新建的

1.1.1在AndroidManifest.xml文件中注册,为静态广播
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
1.1.2 在activity中注册为动态广播
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private MyBroadcastReceiver myBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
myBroadcastReceiver = new MyBroadcastReceiver();
registerReceiver(myBroadcastReceiver, intentFilter);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("android.net.conn.CONNECTIVITY_CHANGE");
sendBroadcast(intent); // 发送广播
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myBroadcastReceiver);
}
}

2、按照发送的方式分类

2.1 标准广播 和 有序广播

标准广播是异步传播,所有的广播广播接收者都是同一时间,没有先后顺序,而且广播是无法截断

有序广播是同步执行的广播,在广播发出去之后,同一时刻只有一个广播接收器可以收到消息。当广播中的逻辑执行完成后,广播才会继续传播。

广播的定义于普通的没啥差别

2.1.1 标准广播

同级别接收是随机的

低级别后收到广播

接收器不能截断广播的继续传播,也不能处理广播

同级别动态注册(代码中注册)高于静态注册(AndroidManifest中注册)

2.1.2 有序广播

同级别接收是随机的

同级别动态注册(代码中注册)高于静态注册(AndroidManifest中注册)

排序规则为:将当前系统中所有有效的动态注册和静态注册的BroadcastReceiver按照priority属性值从大到小排序

先接收的BroadcastReceiver可以对此有序广播进行截断,使后面的BroadcastReceiver不再接收到此广播,也可以对广播进行修改,使后面的BroadcastReceiver接收到广播后解析得到错误的参数值。当然,一般情况下,不建议对有序广播进行此类操作,尤其是针对系统中的有序广播。实现截断的代码为:

abortBroadcast();