精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-08
SMS send:
ComposeMessageActivity (信息编辑 View ) 1. confirmSendMessageIfNeeded -> 是否收信人编辑 View 是否存在并已经显示 2. sendMessage -> 判断是否为紧急模式, true :显示 notice false :收信人数据处理
WorkingMessage 1.send -> 收件人数据处理 2. preSendSmsWorker -> 删除草稿箱的数据 3. sendSmsWorker -> 格式化联系人数据,确保 SMS 没有超过最大数据极限
SmsMessageSender 1. sendMessage 2. queueMessage -> 判断是否需要发送报告;将收件人及信息存入发送队列,发送 ACTION_SEND_MESSAGE 广播,通知 SmsReceiver 去发送消息
SmsReceiver 1. onReceiveWithPrivilege 2. beginStartingService -> 开启 SmsReceiverService
SmsReceiverService 1. ServiceHandler -> 处理传入的请求 2. handleSendMessage -> 处理 SMS 发送函数,假如没有信息在发送,调用 sendFirstQueuedMessage 3. sendFirstQueuedMessage -> 从队列数据中读取要发送的信息数据,调用 SmsSingleRecipientSender 的 sendMessage 函数发送信息,
SmsSingleRecipientSender 1. sendMessage -> 切割信息,将信息移动到以发送库中,调用 framework 接口发送信息
Framework 发送信息后, SmsReceiver 接受包含 result code 数据的广播,交给 SmsReceiverService 根据不同的 result code 做相应的操作:
1.假如发送成功,将信息设置为发送成功,查看是否还有需要发送的信息,如果有,调用 sendFirstQueuedMessage 继续发送 ;
2.当无服务 &radio off 时,将信息移动到发送队列,注册 ServiceState 监听器,当状态变化, ap 尝试重发信息;
3.当 FDN 启动时,只能向固定拨号号码发送信息;
4.其他情况将信息设置为发送失败,查看队列是否有需要发送的下一条消息
前面提到, ap 发送处理过程中,总是将信息移来移去的,什么含义呢?让我们来从 SMS 的 DB 说起, SMS 的数据是存放在数据库当中的 (/data/data/com.android.providers.telephony /mmssms.db),DB 中的 sms 表存储的就是短信的数据,包括回话 ID ( thread_id ),地址( address ) , 类型( type ) , 内容( body )等数据字段;这里讲到的移来移去其实就是设置 type 这个字段, type 字段有 7 个值代表不同的意思,分别是 0 (所有信息), 1 (收信夹), 2 (发信夹), 3 (草稿), 4 (已发送), 5 (发送失败), 6 (发送队列) ;
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1686 次