第二行代码第五章笔记
来源:互联网 发布:中电四公司怎么样 知乎 编辑:程序博客网 时间:2024/06/05 02:18
第五章详解广播机制
广播机制简介
广播的类型主要分标准广播、有序广播。
接收系统广播(注册广播的两种方式)
创建一个广播接收器–>新建一个类并继承BroadcastReceiver–>重写父类的onReceive()方法。
动态注册(代码中注册)
注册用registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法。此方法需要两个参数,需要提前声明。
声明private :IntentFilter intentFilter = new IntentFilter(),然后intentFilter.addAction(String action);
BroadcastReceiver receiver = new BroadcastReceiver();书中例子为private NetworkChangeReceiver networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(receiver, filter)
动态注册的广播接收器一定都要取消注册:unregisterReceiver(receiver);书中例子为:unregisterReceiver(networkChangeReceiver);
书中例子进一步优化,准确地告诉用户是否有网络:在onReceive()方法中,首先通过getSystemService()方法得到了ConnectivityManager的实例,这是一个系统服务类,专门用于管理网络连接的。然后调用它的getActiveNetworkInfo()方法可以得到NetworkInfo的实例,接着调用NetworkInfo的isAvailable()方法,就可以判断出当前是否有网络。
程序访问系统关键性信息,书中例子查询网络状态需在配置文件中声明权限:
静态注册(Androidmanifest.xml中注册)
优点是程序未启动的情况下就能接收广播
通过AS提供的快捷方式创建一个veBroadcastReceiver,Exported属性表示是否允许这个广播接收器接收本程序之外的广播,Enabled属性表示是否启用这个广播接收器,代码中复写onReceive()方法,在里面编写自己的逻辑。
监听系统开机广播声明权限
在标签内添加,静态注册的广播接收器就在里面注册:通过android:name指定哪一个广播接收器,然后在标签中加入想要接收的广播。
不要再onReceive()方法中添加过多的逻辑或者耗时操作,因为广播接收器中是不允许开启线程,方法运行过久而没有结束,系统会报错。
发送自定义广播
发送标准广播
<1>以书中用例子来讲解:先定义一个静态的广播接收器。
<2>定义一个按钮,并设置它的点击事件,并构建一个intent对象且同时传入值(action)入内:
Intent intent = new Intent(String action);
<2>调用Context的sendBroadcast()方法将广播发送出去:
sendBroadcast(intent);
发送有序广播
以书中用例子来讲解:新建一个项目,定义一个静态的广播接收器且接收值和标准广播接收器的值一样,然后在上面例子的程序中发送标准广播,且同时能被两个接收器接收,从而证明发送的广播能被其他程序接收到。
定义一个按钮,并设置它的点击事件,并构建一个intent对象且同时传入值(action)入内:Intent intent = new Intent(String action);
调用Context的sendOrderedBroadcast()方法将广播发送出去(第二个参数是与权限相关的参数): sendBroadcast(intent,null);
在广播接收器中可以截断广播,阻止其继续传播:abortBroadcast();
在AdroidManifest中广播接收器设置优先级:Android:priority=
使用本地广播
发出的广播只能在程序内部进行传递,接收器也只能接收本程序发出的广播,解决了安全性问题。
以书中例子来讲解
<1>先声明两个变量:
private LocalReceiver localReceiver; private LocalBroadcastManager localBroadcastManger;
<2>创建一个广播接收器
class LocalReceiver extends BroadcastReceiver{}
<3>通过LocalBroadcastManager的静态方法getInstance()方法得到它的一个实例:
localBroadcastManger = LocalBroadcastManager.getInstance(this)
<4>发送本地广播
Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST")localBroadcastManager.sendBroadcast(intent)
<5>通过LocalBroadcastManager的静态方法registerReceiver()注册广播并接收本地广播:
intentFilter = new IntentFilter(); intentFilter.addAction(("com.example.broadcasttest.LOCAL_BROADCAST"); localReceiver = new LocalReceiver();localBroadcastManager.registerReceiver(localReceiver, intentFilter);
本地广播无法通过静态注册的方式来接受,因为也不需要,本地广播币全局广播更高效。
广播的实践–实现强制下线功能(暂略)
- 第二行代码第五章笔记
- 第二行代码第五章笔记
- 第二行代码第二章笔记
- 第二行代码第二章笔记
- 第二行代码第二章笔记
- 第二行代码学习笔记——第五章:全局大喇叭——详解广播机制
- matlab编程与工程应用(第二版) 第五章 向量化代码 笔记
- c++ primer(第五版)学习笔记及习题答案代码版(第二章)
- 第一行代码第二版(郭霖著)笔记之第五章(详解广播机制)
- 《c++ primer》 第五版 第二章 笔记
- 第二行代码第三章笔记
- 第二行代码第四章笔记
- 第二行代码第六章笔记
- 第二行代码第七章笔记
- 第二行代码第八章笔记
- 第二行代码第三章笔记
- 第二行代码第四章笔记
- 第二行代码第三章笔记
- cdc管理发布的数据
- bzoj 4300: 绝世好题
- 利用css实现斜线方法
- Python 调用cobbler API 学习笔记
- Redis客户端管理工具的安装及使用
- 第二行代码第五章笔记
- std::istream&初始化的问题
- SDUT-1187 简单编码
- Axios的配置 此处输入图片的描述 既然尤大推荐的应该有过人之处,好吧于是在新的项目上开始使用Axios,开启这段学习(踩坑)的历程。 安装 1 npm install axios 使用 Axio
- Nuttx在Atmel SAMV71 Xplained上的配置
- 严重: Compilation error 解决方案
- jdbcTemplate实现crud操作(添加、删除、更改操作)
- JAVA处理html标签
- Nginx location 配置用法及正则例子