Android Message Application -- SMS(一)

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  ->      从队列数据中读取要发送的信息数据,调用 SmsSingleRecipientSendersendMessage 函数发送信息,

 

SmsSingleRecipientSender

1. sendMessage      ->      切割信息,将信息移动到以发送库中,调用 framework 接口发送信息

 

 

  Framework 发送信息后, SmsReceiver 接受包含 result code 数据的广播,交给 SmsReceiverService 根据不同的 result code 做相应的操作:

 

1.假如发送成功,将信息设置为发送成功,查看是否还有需要发送的信息,如果有,调用 sendFirstQueuedMessage 继续发送 ;

 

2.当无服务 &radio off 时,将信息移动到发送队列,注册 ServiceState 监听器,当状态变化, ap 尝试重发信息;

 

3.当 FDN 启动时,只能向固定拨号号码发送信息;

 

4.其他情况将信息设置为发送失败,查看队列是否有需要发送的下一条消息

 

 

 前面提到, ap 发送处理过程中,总是将信息移来移去的,什么含义呢?让我们来从 SMSDB 说起, SMS 的数据是存放在数据库当中的 (/data/data/com.android.providers.telephony /mmssms.db),DB 中的 sms 表存储的就是短信的数据,包括回话 IDthread_id ),地址( address, 类型( type, 内容( body )等数据字段;这里讲到的移来移去其实就是设置 type 这个字段, type 字段有 7 个值代表不同的意思,分别是 0 (所有信息), 1 (收信夹), 2 (发信夹), 3 (草稿), 4 (已发送), 5 (发送失败), 6 (发送队列) ;

 

 

===========================================================================

 

 

SMS Receive:


 

 

  当接收到 SMS 的时候, framework 发出 SMS_RECEIVED_ACTION 广播, SmsReceiver 接收到广播,开启 SmsReceiverServiceSmsReceiverService 调用 handleSmsReceived 函数处理接收到的信息:从 intent 中获取出 SmsMessage, SMS 数据保存到 DB 中,然后通知 User

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值