2017-10-04 13 views
1

我是新來的android開發。我想從我的後臺服務發送一些SMS消息,它會從服務器獲取一些數據並將其發送給某些客戶端。到目前爲止,它完美地工作,直到他們添加一些描述文字信息。從那以後,我的一些消息不會被髮送。Android - 發送多個多部分消息將錯過其中一些

這裏是我做了什麼至今:

for (MessageData messageData : result) { 
    String message = messageData.getBody(); 
    String recipient = messageData.getRecipient(); 

    int parts_size = smsManager.divideMessage(message).size(); 
    if (parts_size > 1) { 
     ArrayList<String> parts = smsManager.divideMessage(message); 
       smsManager.sendMultipartTextMessage(recipient, null, parts, null, null); 
    } else { 
     smsManager.sendTextMessage(recipient, null, message, null, null); 
    } 
} 

我不知道,如果機器人能夠處理髮送在環或如果我做錯了什麼消息。

謝謝你的幫助。

+0

在'else'塊中添加一個斷點並在調試器模式下運行。然後查看是否到達,並檢查消息的大小(帶描述)是否小於160(短消息的最大大小)。 – chornge

+0

是的,它到達那裏,如果消息小於160,我檢查了數據庫的最大數字字符是491 –

+0

它達到'else'有條件嗎?如果是這樣的話,這意味着你的'parts_size'不大於1. – chornge

回答

0

我試圖關注並使用Mike M's very insightful guidance and code來編寫一條SMS消息發送服務,該消息發送(大或小)消息並在發送下一個消息之前等待每個消息完全發送。大部分的實際工作都是在後臺完成的。

SmsService.java is a gist on GitHub因爲粘貼在這裏有點大。

我的目標之一是看我是否可以將必要的功能放到一個單獨的android組件中。它已經過少量的消息測試,但仍然是實驗性的。 (例如,它避免使用BroadcastReceiver,依靠系統發送的服務startIds的唯一性,很大程度上依賴於意圖表示消息等)

該類有三種靜態方法來設置它,發送消息,並將其拆除:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    SmsService.setup(this); 
} 

private void sendMyMessages() { 
    SmsService.send(this, recipient, sender, "the message text"); 
} 

@Override 
protected void onDestroy() {  
    SmsService.teardown(this); 
    ... 
}