Android 广播事件

(1).广播注册分类

(a).动态注册 在 UI 中注册的广播,例如:

1
2
3
4
5
6
7
IntentFilter intentFilter = new IntentFilter();
//实现了Parcelable接口,可用于过滤广播
intentFilter.addAction(Constants.ACTION_SEND_MSG);
//设置过滤器,规定能接受的广播信号
MessageReceiver messageReceiver = new MessageReceiver();
this.registerReceiver(messageReceiver,intentFilter);
//注册广播

(b).静态注册

需要在 manifest 中进行注册(在安卓 8.0 后系统废除了大部分静态广播,最好使用动态注册)。

(2).广播类型分类

(a).系统广播

系统中已经定义的广播,此类广播只能由系统发出,并且需要在 intent-filter 中加上系统已经写的 action。

(b).自定义广播

顾名思义,是用户自己定义的广播。

(3).动态实现广播

(a)我们首先需要一个广播接收类

1
2
3
4
5
6
7
8
9
10
11
 public class MessageReceiver extends BroadcastReceiver{
//新建一个自己的广播接受类继承自BroadcastReceiver

@Override
public void onReceive(Context context, Intent intent) {
//重写onReceive方法,此方法写自己需要实现的逻辑
String detail = intent.getStringExtra(Constants.KEY_CONTENT);
Toast.makeText(SecondActivity.this, detail, Toast.LENGTH_SHORT).show();
}
}
}

(a)其次注册动态广播

1
2
MessageReceiver messageReceiver = new MessageReceiver();
this.registerReceiver(messageReceiver,intentFilter);

(c)最后需要通过 send 方法发送一个广播供广播接收者接受

1
2
3
4
5
6
7
8
9
10
11
public void send(View v){
String content = mInputBox.getText().toString();
//获取输入框中的值
Intent intent = new Intent();
intent.setAction(Constants.ACTION_SEND_MSG);
//设置action发送哪个广播,Constant类中书写的是常量
intent.putExtra(Constants.KEY_CONTENT,content);
//通过intent携带额外数据
sendBroadcast(intent);
//发送广播
}

整个过程完毕