android 4.2.1短信接收以及应用接收顺序
来源:互联网 发布:php的等于符号 编辑:程序博客网 时间:2024/06/10 19:45
转至点击打开链接
先说下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,可是从这个帖子看来只要没有越界都是可以的。:-(
0 0
- android 4.2.1短信接收以及应用接收顺序
- 短信接收顺序
- 短信接收--Android彩信的接收流程(应用层)
- android接收短信功能
- android 短信接收
- Android-拦截接收短信
- android 接收短信流程
- Android接收端口短信
- android 短信的接收!
- android短信接收过程
- Android 短信接收监听
- android短信接收流程
- Android-拦截接收短信
- 短信接收 Android
- android短信接收/发送
- Android接收短信-createFromPdu
- Android 接收短信
- Android拦截短信,接收短信
- Android中如何使用JUnit进行单元测试
- IOS管理文件和目录
- 用ASP做一个TOP COOL的站内搜索
- Oracle中把一张表查询结果插入到另一张表中
- Java 中的语法糖 (Syntactic Sugar)
- android 4.2.1短信接收以及应用接收顺序
- 怎么用命令行执行jar文件
- 'libxml/tree.h' file not found
- 数据结构之链表
- iOS—设置iTunes Connect中的Contracts, Tax, and Banking
- 64位系统下建立的C++ 项目在32位系统下运行
- Javascript回调函数和匿名函数实例
- 函数探幽
- Android App 隐藏标题栏+状态栏+导航栏