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); //发送广播 }
|
整个过程完毕