Android(java)学习笔记33:注册广播接收者
1. 下面我们先看一部分代码,由代码进行进一步的深入:
registerReceiver( new BroadcastReceiver() {//onReceive中代码的执行时间不要超过5s,android会弹出超时dialog
public void onReceive(Context paramContext, Intent paramIntent)//context :用来获得应用程序信息;Intent:负责所有Activity窗口通讯
{ //ScanResult这个类是用来描述接入网络的信息的,比如:SSID、BSSID、capabilities等等
List<ScanResult> localList = MainActivity.this.wifi.getScanResults();//用来获得手机扫描到的所有wifi的信息
if (localList.size() < 1)//判断List中的元素的个数。localList.size() <1:表示List没有元素,元素的个数表示:搜索到无线网络个数
{
MainActivity.this.connectBtn.setEnabled(false);
Toast.makeText(MainActivity.this.getApplicationContext(), "没有找到无线网络", 1).show();
return;
}
Spinner localSpinner = (Spinner)MainActivity.this.findViewById(R.id.spinner1);//Spinner组件组要用显示一个下拉列表,Spinner的重点问题就是下拉列表项的配置,对它的配置需要使用Adapter类的实现。
ArrayList localArrayList = new ArrayList();//ArrayList是数组类型的集合
Iterator<ScanResult> localIterator = localList.iterator();//实例化localIterator 为元素列表的迭代器。
//在android中,Spinner是一种很重要的控件,一般的使用中,常建立一个所需类型的ArrayList,再通过ArrayAdapter把Spinner绑定到ArrayList上,
//通过ArrayAdapter来使Spinner显示和刷新内容
while (true)
{
if (localIterator.hasNext())
{
//配置spinner控件展现样式,spinner只是承载多项数据,下面是以何种方式展现这些数据
ArrayAdapter<ScanResult> localArrayAdapter = new ArrayAdapter<ScanResult> (MainActivity.this.getApplicationContext(), android.R.layout.simple_spinner_item, localArrayList);
localArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
/* setAdapter:Adapter(适配器)用于提供数据支持这种Spinner
**就是为Spinner 放置适配器
*/
localSpinner.setAdapter(localArrayAdapter);
localSpinner.setPrompt("请选择搜索到网络:");
MainActivity.this.connectBtn.setEnabled(true);
return;
}
localArrayList.add(((ScanResult)localIterator.next()).SSID);
}
}
} //我们这里订阅的是SCAN_RESULTS这个广播,我们注册的广播接收器registerReceiver就是监听这个广播包含的Intent
, new IntentFilter("android.net.wifi.SCAN_RESULTS")) ;
首先,我们要明白一个道理,那就是出现广播接收者原因,如下:
在android里面有各种各样的广播,比如电池的使用状态,电话的接受和短信的接受都会产生一个广播,应用程序也可以接受广播并做出程序逻辑上的处理。
在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。
这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播,就是因为它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理。另外,广播可以被不只一个应用程序所接收,当然也可能不被任何应用程序所接收。
广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的。
Android中广播的是操作系统中产生的各种各样的事件。例如,收到一条短信就会产生一个收到短信息的事件。而Android操作系统一旦内部产生了这些事件,就会向所有的广播接收器对象来广播这些事件。
广播接收器BroadcastReceiver
BroadcastReceiver(广播接收器)是为了实现系统广播而提供的一种组件,并且广播事件处理机制是系统级别的。比如,我们可以发出一种广播来测试是否收到短信,这时候就可以定义一个BraodcastReceiver来接受广播,当收到短信时提示用户。
我们既可以用Intent来启动一个组件,也可以用sendBroadcast()方法发起一个系统级别的事件广播来传递消息。
我们也可以在自己的应用程序中开发BroadcastReceiver,然后把广播接收器这个类或者对象注册到Android操作系统上去,让操作系统知道现在有这样一个广播接收器正在等待接收Android操作系统的广播,即在自己的应用程序中实现BroadcastReceiver来监听和响应广播的Intent。
当有广播事件产生时,Android操作系统首先告诉注册到其上面的广播接收器产生了一个怎么样的事件,每个接收器首先判断是不是我这个接收器需要的事件,如果是它所需要的事件,再进行相应的处理。
例子:我们把骚扰电话的黑名单放到数据库中去,当接到电话时会产生一个接电话事件,事先在Android操作系统中注册一个BroadcastReceiver的对象,当产生事件的时候,会通知我们的广播接收器对象,接收器对象接收到消息之后,就会到数据库里面去取所有黑名单电话和接到的这个电话号码进行比较,如果匹配就直接挂掉。
Android(java)学习笔记33:注册广播接收者的更多相关文章
- Android:日常学习笔记(9)———探究广播机制
Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...
- Android初级教程使用服务注册广播接收者监听手机解锁屏变化
之前第七章广播与服务理论篇写到: 特殊的广播接收者(一般发广播次数频率很高) 安卓中有一些广播接收者,必须使用代码注册,清单文件注册是无效的 屏幕锁屏和解锁 电量改变 今天在这里就回顾一下,且用代码方 ...
- Android学习笔记BroadcastReceiver(广播接收者)
Android发送广播的过程 代码实现 MainActivity.java import androidx.appcompat.app.AppCompatActivity; import androi ...
- Java学习笔记33(集合框架七:Collections工具类)
数组有工具类,方面操作数组 集合也有工具类:Collections 常用方法示例: package demo; import java.util.ArrayList; import java.util ...
- Java学习笔记33(IO:打印流,IO流工具类)
打印流: 有两个类:PrintStream PrintWriter类,两个类的方法一样,构造方法不一样 PrintStream构造方法:接收File类型,接收字符串文件名,接收字节输出流(Ou ...
- [android] 代码注册广播接收者&利用广播调用服务的方法
利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光 主界面里面 在界面创建的时候开启一下服务普通的startService()方法 发送一条广播出去 获取Intent ...
- android菜鸟学习笔记26----Android广播消息及BroadcastReceiver
1.广播类型: Android中的广播有两种类型:标准广播和有序广播.其中,标准广播是完全异步发送的广播,发出之后,几乎所有的广播接收者都会在同一时刻收到这条广播消息,因而,这种类型的广播消息是不可拦 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Android四大组件之一:BroadCastReceiver(广播接收者)
广播接受者是(BroadCastReceiver)是Android中的地大组件之一,之前学习了一些关于BroadCastReceiver方面的知识,今天回过头来发现已经快忘记的差不多了,毕竟现在是刚开 ...
随机推荐
- JS判断包括IE11在内的IE浏览器
function isIE() { //ie? if (!!window.ActiveXObject || "ActiveXObject" in window) return tr ...
- CentOS 6.2出现Disk sda contains BIOS RAID metadata解决方法
今天在安装CentOS 6.2的时候,当进到检测硬盘的时候,总是过不去,报错如下: Disk sda contains BIOS RAID metadata, but is not part of a ...
- 解决运行vue项目的报错This relative module was not found:
运行vue项目出现这样的报错. This relative module was not found: * ../../assets/img/spot.png !./src/components/on ...
- 安装Newton版Swift,配合keystone认证
主控节点安装配置 Keystone 认证服务 主控节点 IP:192.168.81.11 yum install centos-release-openstack-newton -y yum upda ...
- 2、java内存间交互操作
关于主内存与工作内存之间具体的交互协议,即一个变量如何从主内存拷贝到工作内存,如何从工作内存同步回主内存之类的实现细节,java内存模型中定义了8种操作来完成,虚拟机实现时必须保证这8种操作都是原子的 ...
- cmd激活win10
自己动手,KMS激活win10 2016 长期服务版.步骤如下:命令提示符(管理员),依次输入以下3条命令 slmgr /ipk DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJslmgr ...
- unity向量计算
参考:https://www.cnblogs.com/wywnet/p/4790665.html 上面的文章讲的很重要 下面是我自己实现的一个例子 一直一个向量,一个夹角,求另一个向量 按P键改变夹角 ...
- 突破Http协议
突破Http协议 我到不先说什么Http什么的,对于HTTP的彻底理解是http是应用层的一个程序,就像我们写的诸多客户端和服务器模型,我们可能为了可靠,为了方便数据的解析,我们在数据包中其实就是结构 ...
- Python编码规范杂记(很乱:))
Python编码规范 导入模块 每一个(第三方)模块的导入都需要两个import语句, 如下 使用import some的方式导入模块, 如果有还有子模块的话, 则from father.son im ...
- gitbook一仓库多本书持续化部署
引言 本文档用户指导新手如何部署GitLab+Jenkins自动化构建GitBook,并使用Nginx发布资料.在部署过程中,如遇到任何问题,请自行百度. 注意: 此文章的环境和数据,仅为用于调试的片 ...