初识安卓的另一个重要的组件---广播。

1、广播的分类

  • 标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播 接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。

  • 有序广播:是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。

2、广播的注册方式

1、动态注册

动态注册是在app运行时注册。在需要注册的地方写以下代码(监听网络状态为例):

 /**
* 下面是广播的代码
*/

// intentFilter = new IntentFilter();
// intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
// myInternetReceiver = new MyInternetReceiver();
// registerReceiver(myInternetReceiver,intentFilter);

并定义一个内部类,继承Androidx的BroadcastReceiver。

//    //自定义的广播
// class MyInternetReceiver extends BroadcastReceiver{
// @Override
// public void onReceive(Context context, Intent intent) {
// Toast.makeText(context,"internet change",Toast.LENGTH_SHORT).show();
// ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
// if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()){
// Toast.makeText(context,"现在有网",Toast.LENGTH_SHORT).show();
// }else {
// Toast.makeText(context,"没网了",Toast.LENGTH_SHORT).show();
// }
// }
// }

这样就可以动态注册。

2、静态注册

为了方便可以直接new一个自定义的类:new--other---Broadcast Receiver

新建后AS便帮助我们在AndroidManifest.xml中注册了该广播接收器。

因为此处是用开机自启动作示范,所以在该广播接收器内加入要接受的广播类型即开机

所以还需要添加一个权限:

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

至此静态注册已经完成,重启模拟器后便可以接收到广播。

因为是按照《第一行代码》所学习的,那时Android版本还比较低,在后来谷歌更改了静态注册的规则,像这种开启自启动的(流氓)广播已经被禁止了。但是有一些豁免名单里的内容可以静态注册。

3、自定义广播

1、标准广播

做法与静态广播相同,不过不同的是监听的广播是自己自定义的。要新建一个继承BroadcastReceiver的类

然后在需要发送广播的地方插入逻辑代码:

Intent intent = new Intent("com.example.firstdemo.MY_BROADCAST");
Log.i("mytag", "onClick: "+getPackageName());
intent.setComponent(new ComponentName(getPackageName(),"com.example.firstdemo.MyBroadcastReceiver"));
sendBroadcast(intent);

注意:intent.setComponent()方法在书中并未使用,也是因为目前谷歌的规则更改后需要添加的内容,明确指定处理这个intent的组件。既然是使用intent来进行发送广播,那么当然可以在发送广播的时候传递一些数据,以待以后深入。

Android基础02的更多相关文章

  1. android 基础02 - Activity 的生命周期及状态

    返回栈 Android 中的 Activity 是可以层叠的,当我们启动一个新的 Activity 时,就会覆盖在原有的 Activity 之上, 点击 Back 会销毁当前 Activity,下面的 ...

  2. 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用

    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...

  3. 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字

    084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...

  4. 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法

    083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...

  5. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  6. android基础---->IntentService的使用

    这一篇博客,我们开始前台服务与IntentServie源码分析的学习,关于service的生命周期及其简单使用,请参见我的博客:(android基础---->service的生命周期) 目录导航 ...

  7. Android基础测试题(四)

    看了前两道题大家有没有发现,测试题少了(一),大家猜猜测试题(一)是什么? Android基础测试题(四): 需求: 建一个方法,格式化输出2016-11-14 10:15:26格式的当前时间,然后截 ...

  8. Android基础测试题(二)

    今天给大家带来的是Android基础测试题(二) 题目要求: 定义一个5位长度的整型数组并初始化,然后构建方法根据用户传入的数字判断是否存在数组中,如果存在,返回所在位置,如果不存在,返回-1 首先第 ...

  9. javascript基础02

    javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...

随机推荐

  1. 操作失误不要慌,这个命令给你的Git一次反悔的机会

    今天我们来介绍git当中两个非常非常好用的工具,git show和reflog. 这两个命令虽然不是必知必会,但是如果熟练使用可以极大地帮助我们查看代码仓库的问题,以及在我们操作失误的时候拯救我们.可 ...

  2. UNIX目录访问操作

    1.目录访问相关函数: DIR* opendir (const char * path ); struct dirent* readdir(DIR *dirptr) ;参数是一个指向dirent 结构 ...

  3. Linux内核调度分析(转,侵删)

    多任务 并发和并行 Linux作为一个多任务操作系统,必须支持程序的并发执行. 分类 非抢占式多任务 除非任务自己结束,否则将会一直执行. 抢占式多任务(Linux) 这种情况下,由调度程序来决定什么 ...

  4. 用GitHub Pages搭建博客(六)

    本篇介绍GitHub Pages网站加速 在上一篇提到如何对GitHub Pages配置自定义域名.其实,不论GitHub Pages的默认域名还是自定义域名,都使用了GitHub的CDN进行加速,虽 ...

  5. Ceph根据Crush位置读取数据

    前言 在ceph研发群里面看到一个cepher在问关于怎么读取ceph的副本的问题,这个功能应该在2012年的时候,我们公司的研发就修改了代码去实现这个功能,只是当时的硬件条件所限,以及本身的稳定性问 ...

  6. 编译的Ceph二进制文件过大问题

    前言 在ceph的研发群里看到一个cepher提出一个问题,编译的ceph的二进制文件过大,因为我一直用的打包好的rpm包,没有关注这个问题,重新编译了一遍发现确实有这个问题 本篇就是记录如何解决这个 ...

  7. http://www.etymon.cn/yingyucigen/3093.html

    import requests import lxml.etree as etree import xml.etree.ElementTree as ET # 详情页 # 3093-148 # htt ...

  8. Java之定时任务全家桶

    定时任务应用非常广泛,Java提供的现有解决方案有很多.本次主要讲schedule.quartz.xxl-job.shedlock等相关的代码实践. 一.SpringBoot使用Schedule 核心 ...

  9. HTTP请求响应信息字段总结(长期更新)

    http头的Location和Conten-Location HTTP响应细节--常用响应头 HTTP响应中的常用响应头(消息头) Location: 服务器通过这个头,来告诉浏览器跳到哪里 Serv ...

  10. Beyond Compare-这款检查图片工具真的绝了!

    无论是出去旅游,还是参加聚会,在朋友圈分享美美的图片,已经成为了很多都市人的日常.在分享图片前,大多数人都会选择使用滤镜.风格等功能对照片进行一定的美化.但有时候美化的程度比较轻微,连修图的人都无法判 ...