博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
广播的使用
阅读量:4285 次
发布时间:2019-05-27

本文共 3925 字,大约阅读时间需要 13 分钟。


一共分三步

  • 1.定义一个BroadcastReceiver广播接收类
  • 2.注册该广播
  • 3.触发响应

1. 概念

  • 广播事件处理属于系统级的事件处理(一般事件处理是属于View级的事件处理)

  • 一个应用可以在发生特定事件时发送Broadcast, 系统中任何应用只要注册了对应Receiver就会接收到此Broadcast

  • 一个应用如果对某个广播感兴趣, 就可以注册对应的Receiver来接收广播

  • 广播事件机制是应用程序(进程间)之间通信的一种手段

2. 相关 API

//ContextsendBroadcast(Intent intent) : 发送一般广播sendOrderedBroadcast(Intent intent) : 发送有序广播registerReceiver(receiver, intentFilter) : 注册广播接收器unRegisterReceiver(receiver) : 解注册广播接收器//BroadcastReceiveronReceive(Context context, Intent intent) : 接收到广播的回调abortBroadcast() : 中断广播的继续传播boolean isOrderedBroadcast() : 判断是否是有序广播

3. 常见系统广播

收到短信广播 : android.provider.Telephony.SMS_RECEIVED开机完成广播 : Intent.ACTION_BOOT_COMPLETED应用被卸载广播 : Intent.ACTION_PACKAGE_REMOVED手机锁屏 : Intent.ACTION_SCREEN_OFF手机开屏 : Intent.ACTION_SCREEN_ON

4. 编写 BroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent){ //处理广播 }}private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals(ACTION_NAME)){ Toast.makeText(Test.this, "处理action名字相对应的广播", 200); } } };

5. 注册广播接收器类

5.1 方式一: 配置文件注册(静态注册)

5.2 方式二: 硬编码注册(动态注册)

public void registerBoradcastReceiver(){        IntentFilter myIntentFilter = new IntentFilter();        myIntentFilter.addAction(ACTION_NAME);        //注册广播              registerReceiver(mBroadcastReceiver, myIntentFilter);    }

5.3 区别静态注册与动态注册

这里写图片描述

5.4 有序广播和无序广播

发送一般广播

context.sendBroadCast(Intent intent)

发送有序广播

context.sendOrderedBroadcast(Intent intent)

区别

这里写图片描述

6. 触发响应

mBtnMsgEvent = new Button(this);        mBtnMsgEvent.setText("发送广播");        mBtnMsgEvent.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Intent mIntent = new Intent(ACTION_NAME);                mIntent.putExtra("yaner", "发送广播,相当于在这里传送数据");                //发送广播                sendBroadcast(mIntent);            }        });

7. 完整源码

package my.yaner;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;import android.widget.Toast;public class Test extends Activity{
private final String ACTION_NAME = "发送广播"; private Button mBtnMsgEvent = null; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //注册广播 registerBoradcastReceiver(); LinearLayout mLinearLayout = new LinearLayout(this); mBtnMsgEvent = new Button(this); mBtnMsgEvent.setText("发送广播"); mLinearLayout.addView(mBtnMsgEvent); setContentView(mLinearLayout); mBtnMsgEvent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent mIntent = new Intent(ACTION_NAME); mIntent.putExtra("yaner", "发送广播,相当于在这里传送数据"); //发送广播 sendBroadcast(mIntent); } }); } private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals(ACTION_NAME)){ Toast.makeText(Test.this, "处理action名字相对应的广播", 200); } } }; public void registerBoradcastReceiver(){ IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction(ACTION_NAME); //注册广播 registerReceiver(mBroadcastReceiver, myIntentFilter); }}
你可能感兴趣的文章
android之挂断电话
查看>>
android之listview分页加载上拉刷新、更新listview
查看>>
android之获取手机安装包里面的信息、获取目录空间的大小
查看>>
android之listView显示不同的item
查看>>
iOS之代码块的创建
查看>>
iOS之ffmpeg开发音视频编解码概要、SDL
查看>>
iOS/swift之流程控制
查看>>
iOS/swift之定时器
查看>>
iOS/swift之后台执行任务
查看>>
iOS/swift之view获取当前的控制器
查看>>
iOS/swift之进入前后台通知
查看>>
iOS/swift之判断机型和手机尺寸相关
查看>>
iOS/swift之view的常用属性
查看>>
iOS/swift之加密
查看>>
iOS/swift之常用正则
查看>>
iOS/swift之UIDatePickView
查看>>
iOS/swift之path、url、data 、String与Data之间的转换、data和字典之间转换、对象序列化反序列化
查看>>
iOS/swift之UIPickView
查看>>
iOS/swift之截屏
查看>>
iOS/swift之获取系统所有相册和照片录像、封装相册多选
查看>>