当前位置: 代码迷 >> Android >> Android Message Application - SMS(1)
  详细解决方案

Android Message Application - SMS(1)

热度:104   发布时间:2016-05-01 19:18:42.0
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接受包含resultcode数据的广播,交给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

  相关解决方案