1. 程式人生 > >簡訊重發機制

簡訊重發機制

目前簡訊重發分別做在Modem和 App ,對應不同的情況。

Modem:

     Modem的重發做在SMS-TL/ SMS-CM,針對傳送簡訊中的暫時性的錯誤。

     其中涉及到很多底層技術細節,並且這些對於App層來說都是透明的。

     但Modem端的處理可以保證會有1次重發,最長的等待時間是21秒。

     Modem的重發如果失敗了,會通知給App,這時候App就會顯示傳送失敗。同時使用者可以手動重發。

App

      -針對的是網路不可用的情況(脫網導致簡訊傳送失敗)。

      -如果傳送簡訊時發現網路不可用,會向framework註冊ServiceState廣播。

      -當網路恢復時,App會收到廣播並重新發送。

      -這種重發沒有時間限制,會等待網路恢復再去重發。

      -這部分的處理都是在 SmsReceiverService.java 中,當 底層返回了 Radio_off或 No_service時,在handleSmsSent() 中 有註冊 ServiceState: registerForServiceStateChanges(), 當網路恢復時,接收此廣播, 在 handleServiceStateChanged() 中對失敗的簡訊重試。