信息收发

本文详细介绍了Android系统中短信和彩信的接收处理逻辑。短信接收通过Telephony.SMS_RECEIVED广播触发,数据保存到数据库并显示通知。彩信接收则涉及多个服务,包括TransactionService、SmsReceiverService和MessageStatusReceiver。接收到WAP_PUSH_RECEIVED广播后,数据被保存到数据库,接着在TransactionService中处理不同类型的交易。若为通知信息,根据autoDownload决定是否自动下载,下载完成后更新交易状态并通知相关观察者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

彩信、短信、状态信息等的业务逻辑主要是在三个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的情况:发送状态栏通知
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值