黑马程序员安卓教程:广播接收者案例之ip拨号器二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广播接收者案例之ip拨号器二
当拨打电话时,系统会广播该拨打电话事件。因此,我们需要做的是:编写一个BroadcastReceiver,通过该广播接收者来获取系统的电话拨打事件,然后再做一系列的业务逻辑处理。具体操作可以分为以下三步:
1.编写广播接收者
在“01_ip拨号器”工程中编写一个广播接收者,命名为“OutCallReceiver”。此时工程结构如图1-1所示:
图1-1所示
在OutCallReceiver类中,使OutCallReceiver继承BroadcastReceiver并重写onReceive方法。代码如例1-1:
例1-1
对于onReceive方法,参考如下图1-2所示:
图1-2所示
从图1-2可知:当广播接收者收到一个Intent广播时,该方法就会被调用。此时我们便可以来查看或修改该广播接收者的结果值。该方法有两个参数,分别是Context和Intent,前者表示这个广播接收者运行的上下文,后者表示这个广播接收者所接收到的Intent意图。
2.声明该广播接收者
在第一步中,我们已经编写一个广播接收者啦,即相当于有了一个收音机。有了收音机就可以接收到广播了吗?答案是否定的,此时我们还需要给该收音机上电池,还需调频。同理,有了广播接收者并不能接收到系统的广播,我们需要在清单文件中声明该广播接收者,代码如例1-2所示:
例1-2在“01_ip拨号器”的清单文件中注册了一个接收器。在声明该内容接收者时,我们使用了< receiver >标签。该标签的name属性赋值为:内容接收者的包名和类名。标签
图1-3所示
从图1-3可知:标签
3.指定接收的意图
在“01_ip拨号器”中,我们只接收系统拨打电话的广播意图,对于其他的广播意图我们并不关心。如何做才能只接收拨打电话的意图?此时,我们可以用意图过滤器
例1-3
在意图过滤器
图1-4所示
运行程序,然后进入系统的电话拨打应用拨打电话,此时OutCallReceiver就会接收到系统的广播,一旦OutCallReceiver接收到自己所关心的广播,方法onReceive就会执行。此时,logcat打印信息如图1-5所示:
图1-5所示
图1-5可知:当在拨打电话时,OutCallReceiver中的onReceive方法得到响应啦!下面我们需要做的就是得到拨打电话的号码,然后判断该号码是不是外地号码,如果是则在拨打之前在该号码前添加IP号;反之,直接拨打。调整例1-1代码如例1-4所示:
例1-4
例1-4可知:在onReceive方法中调用BrocadcastReceiver的getResultData() 和setResultData() 方法获取和设置电话号码。若拨打的电话号码以”0”开头,则在该电话号码前添加一个IP前缀,然后在拨打电话。假设我们拨打电话“010123456“,此时拨打电话时,效果如图1-6所示:
图1-6所示
从图1-6可知:在拨打电话时在该电话号码的前面添加了一个IP号,即17951。
注意:拨打电话,需要在清单文件中添加相应的用户权限,即: