Android基础02
初识安卓的另一个重要的组件---广播。
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的更多相关文章
- android 基础02 - Activity 的生命周期及状态
返回栈 Android 中的 Activity 是可以层叠的,当我们启动一个新的 Activity 时,就会覆盖在原有的 Activity 之上, 点击 Back 会销毁当前 Activity,下面的 ...
- 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用
085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...
- 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字
084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...
- 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法
083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...
- 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法
082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...
- android基础---->IntentService的使用
这一篇博客,我们开始前台服务与IntentServie源码分析的学习,关于service的生命周期及其简单使用,请参见我的博客:(android基础---->service的生命周期) 目录导航 ...
- Android基础测试题(四)
看了前两道题大家有没有发现,测试题少了(一),大家猜猜测试题(一)是什么? Android基础测试题(四): 需求: 建一个方法,格式化输出2016-11-14 10:15:26格式的当前时间,然后截 ...
- Android基础测试题(二)
今天给大家带来的是Android基础测试题(二) 题目要求: 定义一个5位长度的整型数组并初始化,然后构建方法根据用户传入的数字判断是否存在数组中,如果存在,返回所在位置,如果不存在,返回-1 首先第 ...
- javascript基础02
javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...
随机推荐
- 操作失误不要慌,这个命令给你的Git一次反悔的机会
今天我们来介绍git当中两个非常非常好用的工具,git show和reflog. 这两个命令虽然不是必知必会,但是如果熟练使用可以极大地帮助我们查看代码仓库的问题,以及在我们操作失误的时候拯救我们.可 ...
- UNIX目录访问操作
1.目录访问相关函数: DIR* opendir (const char * path ); struct dirent* readdir(DIR *dirptr) ;参数是一个指向dirent 结构 ...
- Linux内核调度分析(转,侵删)
多任务 并发和并行 Linux作为一个多任务操作系统,必须支持程序的并发执行. 分类 非抢占式多任务 除非任务自己结束,否则将会一直执行. 抢占式多任务(Linux) 这种情况下,由调度程序来决定什么 ...
- 用GitHub Pages搭建博客(六)
本篇介绍GitHub Pages网站加速 在上一篇提到如何对GitHub Pages配置自定义域名.其实,不论GitHub Pages的默认域名还是自定义域名,都使用了GitHub的CDN进行加速,虽 ...
- Ceph根据Crush位置读取数据
前言 在ceph研发群里面看到一个cepher在问关于怎么读取ceph的副本的问题,这个功能应该在2012年的时候,我们公司的研发就修改了代码去实现这个功能,只是当时的硬件条件所限,以及本身的稳定性问 ...
- 编译的Ceph二进制文件过大问题
前言 在ceph的研发群里看到一个cepher提出一个问题,编译的ceph的二进制文件过大,因为我一直用的打包好的rpm包,没有关注这个问题,重新编译了一遍发现确实有这个问题 本篇就是记录如何解决这个 ...
- http://www.etymon.cn/yingyucigen/3093.html
import requests import lxml.etree as etree import xml.etree.ElementTree as ET # 详情页 # 3093-148 # htt ...
- Java之定时任务全家桶
定时任务应用非常广泛,Java提供的现有解决方案有很多.本次主要讲schedule.quartz.xxl-job.shedlock等相关的代码实践. 一.SpringBoot使用Schedule 核心 ...
- HTTP请求响应信息字段总结(长期更新)
http头的Location和Conten-Location HTTP响应细节--常用响应头 HTTP响应中的常用响应头(消息头) Location: 服务器通过这个头,来告诉浏览器跳到哪里 Serv ...
- Beyond Compare-这款检查图片工具真的绝了!
无论是出去旅游,还是参加聚会,在朋友圈分享美美的图片,已经成为了很多都市人的日常.在分享图片前,大多数人都会选择使用滤镜.风格等功能对照片进行一定的美化.但有时候美化的程度比较轻微,连修图的人都无法判 ...