手機收發簡訊V0 2

2021-05-22 12:45:47 字數 879 閱讀 8505

上一次發過一篇文章,是使用at指令集對手機簡訊進行收發的。最近使用的時候發現了一些問題,因此進行了一系列的重構與修改。

問題:(1) 有一些編碼沒有支援;

(2) 使用定時器接收簡訊,造成接收簡訊實時性很低;

(3) 所有操作均為同步操作,是應用程式效率降低;

調整:1. 解碼支援了3種編碼:7位、8位與16位。

對應於pdu編碼中的tp-dcs,7位對應為00,8位對應為08,16位對應為19。7位解碼對應的演算法為7-bit解碼,8位與16位對應於unicode解碼。經過測試,可以將手機、飛信與一款國外手機收發簡訊軟體的簡訊解碼成功。

2. 拋棄定時器方式接收簡訊

前一版本中使用定時器對簡訊裝置進行簡訊列表讀取,at+cmgl=4,這樣造成實時性向當低,因此拋棄這種方式,採用輪詢的方式進行設計,將傳送簡訊列表命令與處理反饋資訊封裝為getallmessage方法。

在類中定義乙個backgroundworker例項,在後台輪詢此方法。如果接收到簡訊之後進行處理。受到新的簡訊後會觸發乙個事件,但是這個事件是在非同步呼叫中傳送的,在消費端使用時需要進行主線程處理。

3. 在接收簡訊時採用失敗處理

我發現,如果手機終端對伺服器傳送簡訊過於頻繁時,會出現讀取不成功,解析隨之不成功的問題。因此需要在thread.sleep(x),這個等待時間上下功夫。如果讀取不成功,多等一等。我採用的方式就是將不成功的次數記錄下來,如果發現有不成功的時候,瞪大的時間加長,讓失敗次數乘以預設等待時間,然後去等待,發現這個辦法可行。但是如果客戶端手機裝置傳送失敗,我就沒轍了。

4. 傳送和接收的行為修改為非同步

以前接收和傳送都是同步的方式,這樣效率頗低。現在把傳送改為非同步,接收簡訊在單獨的執行緒中非同步執行,採用backgroundworker方式。這樣整個應用程式不會出現假死現象。

手機收發簡訊

手機收發簡訊,上一邊文章介紹了簡訊的編碼解碼,在此基礎上編寫了手機收發簡訊的 收發簡訊都是呼叫at指令集。原來設計了乙個版本,收簡訊採用serialport類的datareceive事件,使用at cnmi指令接收短訊息。這樣有個問題,來一條簡訊就會觸發乙個事件,這樣,如果對方發簡訊的頻率過快,特別...

Android收發簡訊

呼叫簡訊編輯介面 intent smsintent new intent intent.action sendto,uri.parse sms 5556 smsintent.putextra sms body press send to send me startactivity smsintent...

Android學習 收發簡訊

使用android api類庫可以自己實現收發簡訊的功能 資訊的傳送,對mms應用程式來講主要是在資訊資料庫中建立並維護一條資訊記錄,真正的傳送過程交由底層 frameworks層 函式來處理 雖然在android系統中已經存在傳送簡訊的應用,但是如果我們在開發其他應用時需要整合傳送簡訊功能,則很方...