专栏首页达达前端使用广播-BroadcastReceiver最详细解析

使用广播-BroadcastReceiver最详细解析

标题图

  • 女孩:BroadcastReceiver是什么呀?
  • 男孩:Broadcast是广播的意思,在Android中应用程序之间的传输信息的机制,BroadcastReceiver是接收广播通知的组件,广播和广播接收器是Android中需要了解的,那么怎么样去了解呢~

广播,大家应该可以理解,我们在学校做眼保健操时,就有个广播,告诉我们要做眼保健操了。广播传递信息告诉我们要做什么,通知信息或传递数据等。广播接收器是用来接收来自系统和应用的广播。

在Android中提供了两种主要的类型广播:标准广播和有序广播。

什么是广播呢?在手机的消息提示框,对话框或通知的形式告诉我们,如我们手机没电了,会弹出提示,接收短信弹出提示等。而Broadcast Receiver为广播接收器,是接收广播的组件。

  • 女孩:那么哥,什么是普通广播和有序广播?
  • 男孩:额,在这里你要了解一下普通广播和有序广播,主要讲一下。~

普通广播:

Normal broadcasts,是一种完全异步执行的广播,当广播发出后,几乎所有广播接收器都会在同一时间收到这条广播。如下图:

图片

这相当于有人在广播室里,播放做眼保健操的信息,一同发出到每个教室一样,没有先后顺序之分,对于普通广播是无法终止广播的传播,一旦发送,无法截断其中一条,几乎被所有接受者收到,而我们做眼保健操的就是接受者了。对于普通广播,在Android中使用Context.sendBroadcast()方法来发送。

有序广播:

有序广播,Ordered broadcasts,是一种同步执行的广播,广播发出后,只会有一个广播接收器能接收到广播消息,当这个广播接收器接收到后,广播才会继承传递,对于有序广播有了先后顺序,在Android中提供了优先级的属性(priority)来控制先后,有序广播中可以截断广播,不被下一个广播接收器接收,这是有序广播的特点。

图片

在这里你了解了普通广播和有序广播的原理,这两种其实就是广播的接收的不同表现形式而已。

BroadcastReceiver的实现:

到头来还是要了解BroadcastReceiver的实现,接下来我列出主要的内容目录,对于广播接收器是我们要掌握的,是Android中重要的四大组件之一。

BroadcastReceiver.png

接收系统广播

你或许会问一下什么又是系统广播,对于掌握手机概念的,应用懂得系统,如:电池电量低,发送系统广播消息;安装新应用,广播安装信息等。

广播注册分动态和静态两种:

动态注册,需要继承BroadcastReceiver的,并重写onCreate()方法,和onReceive()方法,在onReceive()方法中,要实例接收器和IntentFilter实例。接着继续重写onDestroy()方法,加入unregisterReceiver()方法来实现取消注册。

在动态注册的广播接收器中最后一定要取消注册。

简化:

重写onCreate()
重写onDestroy()
extends BroadcastReceiver
重写onReceive()

静态注册,只要在配置文件中修改代码即可,在AndroidManifest.xml文件中:

<receiver android:name=包名.类名>
<intent-filter>
 <action android:name="发送的广播"
</intent-filter>
</receiver>

这里补充说一个自定义的广播接受者

步骤:同样

  1. 继承BroadcastReceiver基类
  2. 复写抽象方法onReceive()方法

以上为发送普通广播的实现形式,那么你还记得一个有序广播吗?对于有序广播的形式很简单,也是和普通广播一样实现。只在发送有差异而已。

有序广播和普通广播差异:只要修改普通广播中sendBroadcast()方法,改成sendOrderedBroadcast()方法即可,你会觉得难记吗?

广播接收器(Broadcast Reveiver) 标准广播(Normal broadcasts) 有序广播(Ordered broadcasts)

这里说一下,我把标准广播说错成标准广播了,其实这里标准和普通随意叫吧,不过为了显示技术牛逼,在外人前尽量说标准广播吧。ok?

使用本地广播:

什么又是本地广播呢?你会问道,本地广播是Android引入的一套机制,为本地广播机制,使用本地广播机制,有很多优点:

  1. 不用但系机密数据被泄漏;
  2. 不用担心安全漏洞的隐患;
  3. 更加高效。

在介绍本地广播之前,前面讲的广播室一种全局的,属于系统全局广播,广播室一个全局的监听器,在Android中,我们要知道广播有两种说法:广播发送者和广播接收者。

在本地广播重点说明:本地广播没有静态注册的方式,静态注册是为了程序在未启动前也能收到广播,而发送本地广播时,我们的程序是已开启了的。

  • 女孩:哥,讲的差不多了,已经掌握了,不过可以写一些代码例子吗?
  • 男孩:嗯,可以,掌握就牛逼了~

代码示例:

// 继承BroadcastReceivre基类
public class MyBroadcastReceiver extends BroadcastReceiver {

 // 复写onReceive()方法
 @Override
 public void onReceive(Context context, Intent intent) {
  //写入接收广播后的操作
 }
}

示例动态注册:

 private IntentFilter intentFilter;
 private MyReceiver myReceiver;

 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  intentFilter = new IntentFilter();
  intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
  myReceiver = new MyReceiver();
  registerReceiver(myReceiver, intentFilter);
 }

 @Override
 protected void onDestroy() {
  super.onDestroy();

  unregisterReceiver(myReceiver);
  
 }

示例静态注册:

<receiver android:name=".包名" >
  <intent-filter>
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
  </intent-filter>
</receiver>

最后都要加权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

发送自定义广播:

Intent intent = new Intent("com.example.dashu.MY_BROADCAST");
//指明要发送的广播值
sendBroadcast(intent);

发送有序广播:

//sendOrderedBroadcast()方法
Intent intent = new Intent("com.example.dashu.MY_BROADCAST");
//指明要发送的广播值
sendOrderBroadcast(intent,null);
<intent-filter android:priority="100">
...
</intent-filter>
//优先级

abortBroadcast();
//截断

本地广播:

localBroadcastManager = LocalBroadcastManager.getInstance(this);
//获取实例

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.....");
myReceriver = new MyReceriver();
localBroadcastManager.registerReceiver(myReceriver, intentFilter);

Intent intent = new Intent("com...");
localBroadcastManager.sendBroadcast(intent);
//发送本地广播

localBroadcastManager.unregisterReceiver(myReceiver);

总结

有关内容就到这里了,本篇介绍了四大组件中的广播组件的知识点。

小礼物走一走 or 点赞

送心

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android开发工程师文集-提示框,菜单,数据存储,组件篇

    添加toast.getView(); imageView添加到toast中,addView();

    达达前端
  • 第六节:详细讲解Java中的装箱与拆箱及其字符串

    大家好,我是 Vic,今天给大家带来详细讲解Java中的装箱与拆箱及其字符串的概述,希望你们喜欢

    达达前端
  • 第76节:Java中的基础知识

    设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat

    达达前端
  • Android高频面试专题 - 基础篇(四)BroadcastReceiver

    Android 中的广播使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。

    Android扫地僧
  • Android中广播实践小结

    Android系统有一套广播消息机制,方便进行每个应用程序之间的消息通知。而且广播接受者作为Android四大组件之一,经常被使用到。我也接触到广播消息机制,因...

    猴哥yuri
  • Android查缺补漏--BroadcastReceiver的类型与使用

    Broadcast 是一种被用于应用内和应用之间传递信息的机制。一个广播可以对应多个接受者。一个完整的广播机制,需要具有以下三个要素: 发送广播的Broadca...

    codingblock
  • 从0系统学Android--5.2 发送广播

    前面已经学习了如何接受广播了,下面来学习如何发送自定义广播,广播类型分为:标准广播和有序广播,下面分别来说一下这两种广播如何发送。

    开发者
  • Android学习--广播机制

            标准广播:  是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎是同一时接收到这条广播。

    Mr.RisingSun
  • 从0系统学Android--5.1 广播机制

    Android 中每个应用程序都可以对自己感兴趣的广播进行注册,这样当注册的广播发出时,应用程序就会接受到。这些广播可能来自系统,也可能来自其他应用程序。

    开发者
  • 从源码角度看广播

    几乎每个安卓应用都无可避免的使用到广播。例如监听WIFI的开启状态、时间的获取,甚至是我们最常用的闹钟功能,都是结合着AlarmManager与广播来实现的。理...

    蜻蜓队长

扫码关注云+社区

领取腾讯云代金券