先说下android上短信接收的流程,直接从RILJ开始讲。processUnsolicited方法接收到新短信消息后,BaseCommands中注册的事件会通过消息机制执行。
RILJ中执行的是如下代码:mGsmSmsRegistrant.notifyRegistrant(new AsyncResult(null, sms, null));所以我们只要看看哪些地方注册了mGsmSmsRegistrant就可以找到,处理接收到新短信的地方。只有GsmSMSDispatcher调用了setOnNewGsmSms()进行注册。由于GsmSMSDispatcher隐式继承了handler类,所以我们只要看他的handlermessage方法和其父类handlermessage方法就行。当然我们也可以直接搜索注册的事件:EVENT_NEW_SMS,在哪些地方进行处理,这样也能找到处理收到新短信的方法。我们找到SMSDispatcher的handleMessage方法。一层层找下去,方法调用顺序如下:dispatchMessage()-> dispatchNormalMessage()-> dispatchPdus()-> dispatchPdus()。到最后发送了一条有序广播结束,方法如下:sendOrderedBroadcast()。
上面一段基本讲解了framework侧接收短信的流程,以及最终通过广播的方式通知应用侧。现在开始说说为什么这里发送的是sendOrderedBroadcast而不是我们android刚入门时候介绍的那种,这两个有什么不同。
声明这个方法的时候,代码里面有说道:这个广播一次只给一个接收者发送消息。所有的接收者按照次序来接收广播,前面的甚至可以传递某些数据给后面的接收者。前面的接收者甚至可以直接丢弃这个广播,这也将导致后面的接收者再也接收不到广播了。总结了下:这种有序广播就是同步的,必须得前面一个接收者处理完才能给后面的接收者。普通的广播就是异步的。这种广播的接收者有先后顺序,也就是说接收者有优先级之分。我们平时使用广播需要记住这两种广播才够用。
再说说优先级的设定,看看配置文件里面的intent-filter,原来它还有一个android:priority="integer"的属性。查看说明可以发现这个就是设定注册者优先级的,并且其强调了这只对同步消息有效,对异步消息无效。其取值范围是-1000---1000,必须是整数一般默认值是0。原生短信中并没有定义这个属性,所以默认值是0。现在有很多应用可以拦截骚扰短信,猜想这些应用注册时候优先级应该设置成了最高,并且检查到是垃圾短信之后就不继续往下传。
补充一个:优先级不同的时候按照优先级的大小进行排序,如果两个receiver的优先级一样怎么办呢?android官方说明有着相同优先级的receiver,其接收到广播的顺序是随机的。
最后再来一个毁三观的知识:http://www.eoeandroid.com/thread-148381-1-1.html 虽然google官方说最大优先级是1000,可是从这个帖子看来只要没有越界都是可以的。:-(

android 4.2.1短信接收以及应用接收顺序相关推荐

  1. Android 短信模块分析(四) MMS之短信的发送与接收

     MMS之短信的发送与接收分析: 一.信息发送: com.android.mms.data.WorkingMessage.java 类 send()函数: public void send() { . ...

  2. android虚拟机接收真实短信,向Android模拟器打电话发短信的简单方法

    在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...

  3. Android实时监听短信并上传服务器

    短信监听 Android监听手机短信的方法有两种,分别为: 1.接受系统的短信广播:当手机收到新消息时,会发送一条广播,通过该广播就可以获取短信内容: 2.监听短信数据库:利用观察者模式监听短信数据库 ...

  4. Android系统开发:短信的号码拦截

    Android系统开发:短信的号码拦截 Code:Android源码 功能要求:针对某号码,短信的接收与发送的监听与拦截. 设备对该号码发送短信的拦截 实现思路 : 应用发送短信(无论是否是默认短信) ...

  5. Android APP 如何发送短信?

    权限配置 低级版本的android版本里,使用配置表的方式. 在AndroidManifest文件中配置权限. <!-- 发送消息--> <uses-permission andro ...

  6. Android监听手机短信

    Android监听手机短信的方法有两种,分别为: 1.接受系统的短信广播:当手机收到新消息时,会发送一条广播,通过该广播就可以获取短信内容: 2.监听短信数据库:利用观察者模式监听短信数据库,当短信数 ...

  7. Android 双卡双待手机解析短信异常分析及解决

    如有转载,请声明出处: 时之沙:http://blog.csdn.net/t12x3456 开发中,难免会遇到各种各样的适配问题,尤其是经过深度修改定制过的系统,有的无论是软硬件上都有很大的区别,这里 ...

  8. android通话记录列表apk,android打电话,发短信,获取通讯录、通话记录、短信记录...

    [实例简介] 代码实现android打电话,发短信,获取通讯录.通话记录.短信记录 [实例截图] [核心代码] 19287b5f-b70c-4210-ab04-9d24ddd60788 └── cal ...

  9. android 发送短信 广播 demo,向Android模拟器打电话发短信的简单方法

    在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...

  10. android 拨打电话 发送短信 权限,Android开发实现拨打电话与发送信息的方法分析...

    本文实例讲述了Android开发实现拨打电话与发送信息的方法.分享给大家供大家参考,具体如下: xml布局: android:layout_width="fill_parent" ...

最新文章

  1. R语言使用GGally包的ggparcoord函数可视化多变量的平行坐标轴图(parallel coordinates plot)、当排序点图的数据对象变多的可视化效果变差的时候
  2. [转]23种经典设计模式的java实现_5_职责链模式
  3. 自己动手生成评论RSS
  4. Mac OS Terminal 几个快捷键
  5. Windows 软件推荐2020
  6. js实现数据结构及算法之二叉树(Binary Tree)
  7. Windows server 2008系统各类版本的优缺点比较,Windows2008系统标准版 企业版 数据中心版 WEB版等...
  8. c语言一整行一整行读取文件
  9. 网络安全:与 TCP 连接管理相关的网络攻击
  10. MyBatis源码分析(三):MyBatis初始化(配置文件读取和解析)
  11. PHP验证码识别实例
  12. JS调用服务器端方法
  13. IntelliJ Idea 下Png图片打开方式导致编码报错
  14. golang简介_Golang简介
  15. ES6——let-const的变量声明以及模板字符串
  16. 小甲鱼C++快速入门——第四天
  17. 【Argoverse 1 Motion Forecasting Dataset】轨迹预测数据集简介
  18. Arduino实时时钟设计(TM1637数码管显示)
  19. F7弹出界面模糊查询
  20. RH10M漏电故障保护继电器

热门文章

  1. 量子计算机加密货币,量子计算机会打击到加密货币吗?
  2. 学计算机的基本技能,大学计算机基础—基本应用技能[规整].pdf
  3. Centos使用yum极速安装Java 1.8
  4. 全局变量,静态局部变量,局部变量空间的堆分配和栈分配问题
  5. deletefile失败 代码5怎么办_Go语言高级窍门与技巧,看完你也能写出高质量代码...
  6. 《Netty权威指南》第1章 Java的I/O演进之路
  7. android 第三方裁剪,Android裁剪意向不适用于系统图库应用程序,但适用于第三方应用程序...
  8. oracle中的sql文本类型,Oracle数据库的空间数据类型
  9. android 8.0后台定位,Android 8.0权限说明
  10. java正则出现次数_正则表达式(二)—匹配次数的正则