BroadcastReceiver,作为一个广播接收者,因为android组件之间消息的传递基于intent,所以广播接收者想要接收什么类型的广播,将receiver标签下的intent-filter标签下的action标签的值置为那个广播类型即可,如

上面这段代码其实就注册了两个广播接收的类型,系统开机启动完成时的广播和短信到来的广播(注意加上短信接受权限)都会被接收到,然后可以再onReceive()方法里面写上你想写的代码了。

额外提个事,权限问题一定要加上,现在的logcat里面Permission denied的提示都不是红色的了,改成橙色的,我还以为我这没出问题,找了半天代码的问题,结果后来还是发现权限配错了,本来想拦截拨出的电话的,结果没配权限怎么都拿不到数据啊,找了十几分钟。虽然相对前些天我找一个上午的权限问题进步多了,但是我还是这么认为,玩android权限问题都要找个十来分钟的话那就太2了。

除了在清单文件中配置以外,也可以在代码中订阅

IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

Receiver receiver = new Receiver();

registerReceiver(receiver, filter);

Receiver是你自己写的继承自BroadcastReceiver的类。IntentFilter就对应着Action啦。

还有一个细节是sendBroadcast的三种发送方法。

sendBroadcast(),sendOrderedBroadcast()和

sendStickyBroadcast()

sendBroadcast()这个方法的广播是能够发送给所有广播接收者,按照注册的先后顺序,如果你这个时候设置了广播接收者的优先级,优先级如果恰好与注册顺序相同,则不会有任何问题,如果顺序不一样,会出leaked IntentReceiver 这样的异常,并且在前面的广播接收者不能调用abortBroadcast()方法将其终止,如果调用会出BroadcastReceiver trying to return result during a non-ordered broadcast的异常,当然,先接收到广播的receiver可以修改广播数据。

sendOrderedBroadcast()方法顾名思义就是priority的属性能起作用,并且在队列前面的receiver可以随时终止广播的发送。还有这个api能指定final的receiver,这个receiver是最后一个接收广播时间的receiver,并且一定会接收到广播事件,是不能被前面的receiver拦截的。实际做实验的情况是这样的,假设我有3个receiver依序排列,并且sendOrderedBroadcast()方法指定了一个finalReceiver,那么intent传递给这4个Receiver的顺序为Receiver1-->finalReceiver-->Receiver2-->finalReceiver-->Receiver3-->finalReceiver。这个特性可以用来统计系统中能监听某种广播的Receiver的数目。

sendStickyBroadcast()字面意思是发送粘性的广播,使用这个api需要权限android.Manifest.permission.BROADCAST_STICKY,粘性广播的特点是Intent会一直保留到广播事件结束,而这种广播也没有所谓的10秒限制,10秒限制是指普通的广播如果onReceive方法执行时间太长,超过10秒的时候系统会将这个广播置为可以干掉的candidate,一旦系统资源不够的时候,就会干掉这个广播而让它不执行。

下面是广播接收者的生命周期以及一些细节部分:

1.广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁

2.广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框

3.最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉

4.耗时的较长的工作最好放在服务中完成

至于广播接收者接收用户的短信,实现ip拨号等功能,明白上面的话实现起来就轻而易举了。

android粘性广播何时结束,Android之粘性广播理解相关推荐

  1. android广播intent原理,Android中BroadcastReceiver详解

    BroadcastReceiver是什么? Android app可以发送广播也可以接收系统或者其它app发送的广播,是发送/订阅的设计模式.这些广播被发送当重要的事件发生的时候.例如,安卓系统发送广 ...

  2. android 广播解绑,Android四大组件之BroadCast

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android四大组件之BroadCast 一.广播概述 Android应用可以从Android系统和其他Android ...

  3. Android活动,控件,碎片,广播,数据库小总结

    系统架构与开发环境搭建 3月2日Android Activities代码练习 3月5日 Intent的应用与传值 3月9日 1:显式Intent与隐式Intent的区别         显式Inten ...

  4. android oreo_Android Oreo隐式和显式广播接收器

    android oreo In this tutorial, we'll discuss the changes in Broadcast Receiver since Android Oreo. W ...

  5. android两种广播注册区别,Android 注册广播的两种方式对比

    Android 注册广播的两种方式对比 1.常驻型广播 常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接受到, 他的注册方式就是在你的应用程序中的AndroidManif ...

  6. android s静态广播,重走android(3)广播 · sk600’s Studio

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 广播作为android四大组件之一,应用非常广泛,主要通过intent这个"介质"来传递信息,可以完 ...

  7. android广播唤醒app,Android APP唤醒打开其他APP

    App(a):判断是否为App(b)是否存在,不存在选择下载 存在后台状态直接唤醒 否则直接打开 App(a)部分代码 if (checkPackage("com.xxx.android&q ...

  8. android广播代码汇总二__有序广播

    分析 普通广播(Normal Broadcast): 一,优缺点:和有序广播的优缺点相反! 二,发送广播的方法:sendBroadcast() 有序广播(Ordered Broadcast): 一,优 ...

  9. android 4.0.3开机时不能收到广播

    ============问题描述============ 在android 4.0.3的手机上,receiver在手机开机后收不到启动广播,代码如下: 配置文件:    <receiver an ...

  10. android 发送显示广播,如何查看Android系统当前发送了什么广播

    作者:Yogi 前言:在开发的时候,我们有时想知道我们定义的广播是否成功发送,或者想知道做了某个操作,系统是否会发送广播,并且发送了什么广播.如果说能够直接查看到,那是非常好的,这样就不需要googl ...

最新文章

  1. windows 7 下安装 Android 设备驱动
  2. sulime text 3
  3. 椭圆中心到椭圆切线的距离
  4. ng-content的一个实际例子
  5. html模块殃射,【Web前端问题】webpack打包后,module模块中的函数无法在html标签的事件中调用?...
  6. C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区...
  7. python群发邮件1000人-python读取excel群发邮件(一)
  8. java_函数的概述
  9. 51CTO-redis-集群安装以及动态扩容
  10. mysql 自动安装脚本_mysql 5.7自动安装脚本
  11. 记一次线程池任务执行异常
  12. 带你十分钟了解BFC(渡一教育笔记)
  13. everedit选择_【EverEdit怎么用】EverEdit好不好_使用技巧-ZOL软件百科
  14. EntityFramework 连接数据库出错
  15. (6)数据结构-共享栈
  16. Java使用itextpdf生成PDF文件并添加斜面水印并完成下载(图片导出pdf)
  17. MATLAB导出矢量图
  18. Systrace抓取
  19. 移动端车牌识别,交警助力
  20. Caltech-UCSD Birds 200 (CUB) 数据库预处理

热门文章

  1. linux上删除rime方案_超强的输入法:rime的配置(linux)
  2. 为什么说python是世界上最好的语言-《权力的游戏》告诉你,为啥 Python 是世上最好的语言...
  3. C语言switch语句无break
  4. 个人介绍 php 怎么说,个人介绍怎么写
  5. android 双向加密算法,Android编程加密算法小结(AES、Base64、RAS加密算法)
  6. 获取当前的url并移除不想要的字段
  7. sql注入漏洞--sqlmap使用
  8. buff系统 游戏中_arpg游戏的技能系统和buff系统的一种实现
  9. POJ 3295 Tautology(构造)
  10. c语言 统计数量用count_C语言中count是什么意思?