配色: 字号:
《Android项目式程序设计》09 广播接收者写字字帖
2023-05-24 | 阅:  转:  |  分享 
  
项目九广播接收者学习目标了解广播接收者组件的作用和意义掌握使用广播发送信息掌握使用监听广播掌握保存广播相关信息情景导入智能手机已成为人们生活
工作中存储发送信息文件的重要工具,而广播是一种广泛运用在应用程序之间传输信息的机制,适用于信息的发送、收和保存。本次任务主要学习使
用广播接收者对信息进行接收和发送,使读者对信息的发送与存储有一定的了解。任务描述本任务将设计一款利用广播进行监听的“闹钟”软件。使
用线性布局技术来设计闹钟系统界面主界面点击“设置闹钟”进行时间的设置,并将设置的时间显示到界面当前时间与设置时间一致时,弹出对话框
进行提示用户可点击“关闭”,将闹钟关闭在主界面中,可点击“移除闹钟”,将已设置的闹钟进行移除当用户退出应用程序时,会弹出“确认退出
”提示框,点击“确定”按钮则退出,点击“取消”按钮则回到主界面【基本框架】基本框架如图9.1所示,将框架图转换成的效果如图9?.2
所示。 ?任务描述任务技能技能点1 广播接收者1 广播接受者简介BroadcastReceiver是Android系统的四大组
件之一, BroadcastReceiver监听的事件源是Android应用中的其他组件。如startService()方法启动的
Service之间的通信,就可以借助BroadcastReceiver来实现,下面的图9.3是广播的流程图。任务技能Broadca
stReceiver用于接收程序所发出的Broadcast Intent,与应用程序启动Activity、Service一样,需要
两步启动:创建需要启动的BroadcastReceiver的Intent;调用Context的sendBroadcast()方法或
sendOrderedBroadcast()方法启动指定的BroadcastReceiver。任务技能 2 广播接收者注册方法实
现BroadcastReceiver的方法只需重写BroadcastReceiver的onReceive(Context cont
ext,Intent intent)方法即可。实现BroadcastReceiver后,指定该BroadcastReceiver所
匹配的Intent,以下有两种方法,分别是动态注册与静态注册。
使用代码进行动态注册,调用Broad
castReceiver类的Context的registerReceiver()方法,动态注册的特点是,在代码中进行注册后,当应用
程序关闭后,就不再进行监听。静态注册是在AndroidManifest.xml文件中配置,注册常驻是静态注册的特点,?不论该应用是
否处于活动状态,如有广播传来,将会被系统调用自动运行。 ?任务技能3 广播事件的执行每次执行系统Broadcast(广播)事件,
系统就会创建对应的BroadcastReceiver实例,并自动触发它的onReceive()方法,onReceive()方法执行
完后,BroadcastReceiver实例会被销毁。若BroadcastReceiver的onReceive()方法在10秒内不
能执行完成,系统会认为程序无响应,所以不能在BroadcastReceiver的onReceive()方法里执行一些耗时的操作,否
则会弹出ANR对话框。任务技能广播接收者(BroadcastReceiver)其实是一种用于接收广播的Intent,广播Inten
t的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实
现的。订阅了此Intent的多个广播接收者都可以接收此广播。要实现一个广播接收者方法如下。(1)继承BroadcastReceiv
er,并重写onReceive()方法。任务技能(2)订阅感兴趣的广播Intent,订阅方法有两种:使用代码进行订阅。在Andro
idManifest.xml文件中的节点里进行订阅。任务技能除了短信到来广播Intent,Android
还有很多广播Intent,如:开机启动、电池电量变化、时间已经改变等广播Intent,接收电池电量变化广播Intent如下所示。(
1)在AndroidManifest.xml文件中的节点里订阅此Intent。任务技能(2)接收开机启动
广播Intent,在AndroidManifest.xml文件中的节点里订阅此Intent。(3)并且要
进行权限声明。任务技能技能点2 广播的发送与接收在程序中发送广播十分简单,需要调用Context的sendBroadcast(I
ntent intent)方法,广播将会启动Intent参数所对应的BroadcaseReceiver。以下是对如何发送Broad
cast、使用BroacastReceiver接收广播的介绍。1 广播的发送Broadcast分为普通广播和有序广播。普通广播只
能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播,这样就提高了数据传播的安全性。但普通广播无法通过静
态注册的方式来接收。普通广播使用LocalBroadcastManager来对广播进行管理,并提供了发送广播及注册广播接收器的方法
,图9.4、图9.5分别发送为普通广播和有序广播的过程示意图。任务技能图9.4 普通广播图9.5 有序广播任务技能普通广播对于多个
接收者来说是完全异步的,每个接收者都不需要等待便可以接收到广播,接收者之间不会有影响。接收者无法终止无法阻止其他接收者的接收动作有
序广播(Ordered Broadcast)比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低
的接收者那里,优先级高的接收者有能力终止这个广播。Broadcast Intent的传播一旦终止,后面的接收者将无法接收到Broa
dcast。另外,Ordered Broadcast的接收者可以将数据传递给下一个接收者。Context提供以下两种方法由于发送广
播,如表9.1所示任务技能对于Ordered Broadcast而言,优先接收到Broadcast的接收者可以通过setResul
tExtras(Bundle)方法将处理结果存入Broadcast中,然后传给下一个接收者,下一个接收者通过代码Bundle bu
ndle = getResultExtras(true)可以获取上一个接收者存入的数据。有序广播的注意事项有以下几点:(1)有序广
播被广播接收器接收时,广播接收器注册也可以不设置监听优先级即中的android:priority属性不用配置,如果不设置仍然可以监听到广播,但是这样一来就是另一种监听顺序。这样可以按
照监听普通的广播一样去监有序广播。任务技能(2)BoradcastReceiver中方法?public final boolean
?isOrderedBroadcast()?,可以判断当前进程正监听到的广播是否有序,如果有序返回true,无序返回false。(
3)广播是否有序与广播是否有权限无关。两者也可以接合使用。(4)多个广播接收器监听有序广播时,如果没有按照监听有序广播的形式去监听
,即在注册广播接收器时不设置优先级,不同项目中的广播接收器的监听顺序就是任意的,如果在一个项目中想先收到广播,则在清单文件中就要先
注册。(5)系统收到短信时,发出的Broadcast就是 Ordered Broadcast。如果先实现阻止用户收到短信,就可以通
过设置优先级,让自定义的BoradcastReceiver先获取到Boradcast,然后终止Boradcast。任务技能发送自定
义的无序广播的过程,首先要发送广播,代码如下。任务技能然后是接收广播,我们需要新建一个类,继承BroadcastReceiver,
具体实现方法如下任务技能2 广播的接收 BroadcastReceiver的一个重要用途就是接收系统广播。当应用需要在系统特定时
刻执行某些操作,就可以通过监听系统广播来实现。Android的大量系统时间都会对外发送普通广播。Android常见的广播Actio
n常量如表9.2所示。任务技能接收系统的广播首先要新建一个类继承BroadcastReceiver,以监听SD卡状态的广播接收者为
例,具体实现方法如下。任务技能最后在清单文件中添加意图过滤器,action里写监听的内容。具体实现方法如下。任务实施第一步:在Ec
lipse中创建一个Android工程,命名为“闹钟系统”,并设计界面。如图9.2所示。第二步:在src文件夹下建立MainAct
ivity.java文件并实现界面初始化。 第三步:点击“设置闹钟”按钮,实现闹钟设置功能并实现闹钟监听功能。第四步:点击“移除闹
钟”按钮,实现闹钟移除功能并实现闹钟监听功能。第五步:实现退出程序,显示确认退出提示框。第六步:运行程序,运行结果如图9.6所示。
任务拓展【拓展目的】 熟悉并掌握使用广播接收者发送、监听、保存信息【拓展内容】在“闹钟系统”的基础上实现闹铃功能,界面如图9.3所
示。【拓展步骤】1 设计思路 根据闹钟提示播放闹铃音乐。2 开启和关闭闹铃功能。任务拓展任务总结本任务主要介绍了Broadca
stReceiver,以及手机监听的使用方法。系统提供的Service和 BroadcastReceiver的结合使用是本项目的学习难点。二者的使用都涉及到权限的添加,需要读者重点掌握。通过对本项目的学习可以更加清楚的了解广播类型以及手机监听的使用方法,掌握权限添加的基本流程,提高对广播接收者的认知度。英语角receiver? 接收者broadcast 广播state 状态sleep 睡眠update 更新while 当…时system 系统width 宽label 标签method 方法
献花(0)
+1
(本文系大高老师首藏)