一. 广播接收器的两种注册方法

1. 静态注册

在 AndroidManifest.xml 中注册,这种注册方法只要 APP 安装了,广播接收器就会一直存在。

<receiver android:name=".MyReceiver"><intent-filter><action android:name="com.geek99.MY_BR"/></intent-filter>
</receiver>

在代码中如何接收和发送广播

// 广播接收器
public class MyReceiver extends BroadcastReceiver {// 接收广播@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context,"消息来啦!",Toast.LENGTH_SHORT).show();}
}// Activity 发送广播
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}// 静态注册,发送广播public void send(View view) {// Intent intent = new Intent(this, MyReceiver.class);Intent intent = new Intent("com.geek99.MY_BR");sendBroadcast(intent);}
}

2. 动态注册

动态注册不用在 AndroidManifest.xml 中注册广播接收器,而是在代码里面当创建 Activity 创建和注册广播接收器。

// 广播接收器类
public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context,"消息来啦!",Toast.LENGTH_SHORT).show();}
}// Activity 动态注册广播接收器,发送广播
public class MainActivity extends AppCompatActivity {MyReceiver mMyReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mMyReceiver = new MyReceiver();}@Overrideprotected void onResume() {super.onResume();IntentFilter filter = new IntentFilter();filter.addAction("com.geek99.MY_BR");// 注册广播接收器registerReceiver(mMyReceiver,filter);}// 一个 Button 的回调函数,发送广播public void send2(View view) {Intent intent = new Intent("com.geek99.MY_BR");sendBroadcast(intent);}@Overrideprotected void onStop() {super.onStop();// Activity 停止时,注销广播接收器unregisterReceiver(mMyReceiver);}
}

二. 有序广播

在 AndroidManifest.xml 中注册广播接收器时,可以在 android:priority 声明优化级,数字值越大,优化级越高。如下例子,两个广播接收器的 action 是相同的,action 相同的广播,可以用同个 intent 同时 send 出去,但优化级高的会先在 reciever 收到。

<receiver android:name=".MyReceiver"><intent-filter android:priority="100"><action android:name="com.geek99.MY_BR"/></intent-filter>
</receiver><receiver android:name=".MyReceiver2"><intent-filter android:priority="1000"><action android:name="com.geek99.MY_BR"/></intent-filter>
</receiver>
// receiver1
public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "我第一个收到消息!", Toast.LENGTH_SHORT).show();}
}// receiver2
public class MyReceiver2 extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "我第二个收到消息!", Toast.LENGTH_SHORT).show();this.abortBroadcast();}
}// 如上两个 Receiver,在 AndroidManifest.xml 中注册优化级高的,会先收到广播,Toast 会先打印

三. 系统广播

在 Android 系统某些事件发生时,会收到一些广播。

https://developer.android.com/reference/android/content/Intenthttps://developer.android.com/reference/android/content/Intent

在 AndroidManifest.xml 中注册广播接收器,接收 action 为 "android.intent.action.TIME_SET" 的系统广播。

<receiver android:name=".MyReceiver"><intent-filter><action android:name="android.intent.action.TIME_SET"/></intent-filter>
</receiver>
// 广播接收器
public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "时间更改了!", Toast.LENGTH_SHORT).show();}
}public class MainActivity extends AppCompatActivity {MyReceiver r;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);r  = new MyReceiver();}@Overrideprotected void onResume() {super.onResume();// 过滤 Intent,接收广播IntentFilter f = new IntentFilter();f.addAction(Intent.ACTION_TIME_CHANGED);registerReceiver(r,f);}
}

【Android】BoardcastReceiver简介相关推荐

  1. 【译】Android系统简介—— Activity

    续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...

  2. Android ViewTreeObserver简介-------------转

    Android ViewTreeObserver简介 一.结构 public final class ViewTreeObserver extends Object java.lang.Object ...

  3. android radiooptions简介

    android radiooptions简介 RILD负责modem和RILJ端的通信,信息分两种:unsolicited和solicited,前者是由modem主动上报的,诸如时区更新.通话状态.网 ...

  4. Android 的简介和体系结构中每个层的功能。

    Android 的简介和体系结构中每个层的功能. 1.简介 Android是由Google公司和开放手机联盟领导并开发的一种基于Linux的自由且开放源代码的操作系统,主要使用于移动设备. Andro ...

  5. Android字体简介

    Android字体简介 Android系统默认支持三种字体,分别为:"sans","serif","monospace". android. ...

  6. Android OkHttp3简介和使用详解

    一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpC ...

  7. android 教程概要,Android精通教程-第一节Android入门简介

    前言 大家好,我是 Vic,今天给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cea ...

  8. Android HIDL 简介

    Android HIDL 简介 Qidi 2017.08.01 (Markdown & Haroopad) 注意:本文基于 Android 8.0 进行分析. 0.特别声明 本文是在 HIDL ...

  9. Android开发-简介(一)

    Android的简介: Android是一种基于Linux 内核和其他开源软件的修改版本的移动操作系统,主要为智能手机和平板电脑等触摸屏移动设备设计.Android是由一个被称为开放手机联盟的开发者联 ...

  10. 《Android游戏编程入门经典》——1.1节Android 4简介

    本节书摘来自异步社区<Android游戏编程入门经典>一书中的第1章,第1.1节Android 4简介,作者[美]Jonathan S. Harbour,更多章节内容可以访问云栖社区&qu ...

最新文章

  1. 交叉编译_Golang交叉编译
  2. pthread_t描述说明
  3. 【杭电多校2020】Distinct Sub-palindromes【结论】【构造】
  4. Redis---概述
  5. java中访问控制修饰符什么含义_关于Java中访问控制修饰符的来由及浅解
  6. 3-20Pytorch与张量裁剪运算
  7. centos恢复图形界面_CentOS 7 启动与切换图形界面
  8. android studio降版本,Mac下Android Studio完美从2.2.2降级到2.1.3正式版方案
  9. Codeforces - 346A - Alice and Bob - 简单数论
  10. lptwrite matlab,matlab读取地震数据sgy
  11. 把谷歌主题背景图片保存下来
  12. 微信公众号开发-取得AccessToken
  13. 天龙八部科举答题问题和答案(全7/8)
  14. Android JNI:lame库的编译及使用
  15. SAP那些事-职业篇-2-AI能不能替代SAP顾问
  16. 大学计算机李凤霞课本百度云,大学计算机
  17. 这么多年你还在怕正则吗?
  18. php 周易,GitHub - jyiL/lunarPHP: 易经六十四卦排盘类库
  19. C语言练习题的错题集
  20. 数据结构 C 代码 6.2: 哈夫曼树 (学生提供代码)

热门文章

  1. js通过字节长度截取中英文混合字符串
  2. git 暂存当前分支修改,切换到别的分支
  3. K8S-OrphanedPod清理脚本
  4. 如何识别64位和32位CPU
  5. 如何在局域网下建立共享文件夹?
  6. 5年来做QQ与QQ群营销所走过的坑、奉劝大家别再在这块上花心思了
  7. 【研究生工作周报】(第十周)
  8. 自动驾驶汽车为什么需要高精度定位?干货都在这里
  9. IP基础知识 —— “一篇盖全”
  10. 请描述定时器初值的计算方式_51波特率发生器定时器初值计算方法[转载]