现在的位置: 首页 > 综合 > 正文

信息收发

2013年04月19日 ⁄ 综合 ⁄ 共 1605字 ⁄ 字号 评论关闭

彩信、短信、状态信息等的业务逻辑主要是在三个service中处理的:TransactionService.javaSmsReceiverService.java、MessageStatusReceiver.java

 

短信接收

  1. framework发送广播:Telephony.SMS_RECEIVED
  2. PrivilegedSmsReceiver.java接收广播
  1. SmsReceiverService.onStartCommand
  1. SmsReceiverService.mServiceHandler.handleMessage
  1. handleSmsReceived保存数据到数据库,如果保存成功,就发送状态栏通知MessagingNotification

 

彩信接收

  1. framework发送Telephony.WAP_PUSH_RECEIVED,并且mimeType类型是application/vnd.wap.mms-message
  1. PushReceiver.java接收广播,处理MESSAGE_TYPE_DELIVERY_IND、MESSAGE_TYPE_READ_ORIG_IND、MESSAGE_TYPE_NOTIFICATION_IND三类信息,只要不是重复信息,都先保存到数据库表PduPersister.persist,如果是前两类信息,一条彩信就会有彩信正文、送达报告、阅读报告等多条记录并存;如果是通知信息,在保存后会启动TransactionSercice
  1. TransactionService.mServiceHandler.handleMessagecase
    EVENT_TRANSACTION_REQUEST处理,在此判断transactionType,根据不同类型创建transaction对象(如果是Transaction.NOTIFICATION_TRANSACTION,会创建NotificationTransaction对象),然后执行processTransaction:先开启mms连接-beginMmsConnection,如果已经在连接状态,就继续,否则退出等待连接状态的变化(启动连接是异步执行的,TransactionService会监听网络连接的变化ConnectivityBroadcastReceiver,如果成功启动了就会执行processPendingTransaction进而重新进入processTransaction),后续执行会进入Transaction的子类如NotificationTransaction、RetrieveTransaction、SendTransaction、ReadRecTransaction
  1. 为处理通知信息,会执行NotificationTransaction.process,先检查是否自动下载autoDownload,如果false,就执行sendNotifyRespInd到mmsc;如果true,就先下载(成功的话就保存数据PduPersister.persist),无论是否下载成功都sendNotifyRespInd;对transaction,如果下载成功置状态TransactionState.SUCCESS否则TransactionState.FAILED;最后notifyObservers通知观察者RetrySchedulerTransactionService
  1. 如果没有成功下载,后续处理主要在RetryScheduler.upate中,在此只处理TransactionState.FAILED的情况,启动尝试下载计划scheduleRetry;如果已经下载成功,后续处理主要在TransactionService.update中,在此只处理TransactionState.SUCCESS的情况:发送状态栏通知

抱歉!评论已关闭.