2012-09-03 520 views
11

我的工作在Android短信application.I可以使用下面的代碼發送短信到單個聯繫人。寫短信發送內容://短信/發送表

sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 

現在我想發送短信到multicontacts.Some建議使用loop.SO我現在使用循環發送短信到多接觸。

發送每條短信後,我寫這些值來發送表。

ContentValues values = new ContentValues(); 
    values.put("address", mobNo); 
    values.put("body", msg); 
    getContentResolver().insert(Uri.parse("content://sms/sent"), values); 

每個新地址都會創建一個新的線程ID。 例如,如果我的接收者的地址是x,那麼線程ID爲1,y線程ID爲2.如果我想向x和y發送短消息,那麼如何寫入sms/sent表。 如果我使用Loop,那麼它將不會創建任何新的線程ID,因爲發送地址x已經有線程ID 1,並且y已經有線程ID 2.所以在線程ID 1和2下列出的消息永遠不會創建新的線程ID 。

我試圖通過

values.put("thread_id", 33); 

但隨後在新線程ID的郵件不會在默認的應用程序列出,但在我的應用程序manualy插入線程ID。

請幫我的朋友

編輯:我試着用0,然後讀數生成的thread_id單,然後將這個thread_id,則接下來的短信,仍然沒有工作。

+0

所以你想要一個單獨的組合線程,即使已經有一個線程爲1和2? – nandeesh

+0

@ Nandesh..yes..Native應用程序就像那個 – sarath

+0

線程正是這樣,他們是基於一個單一的數字,你不能爲2個數字定義一個新的線程。你將不得不自己創建應用程序並擁有自己的數據庫如果你想以自己的方式 – nandeesh

回答

13

您需要手動創建一個新thread_id,正常contentResolver.insert(...)不會爲多個收件人的郵件做。要創建新的thread_id您查詢以下URI

content://mms-sms/threadID

,並把它添加必要的收件人,以便最後它看起來像這樣

content://mms-sms/threadID?recipient=9808&recipient=8808

所以完整的例子是這樣的。說,收件人是98088808

Uri threadIdUri = Uri.parse('content://mms-sms/threadID'); 
Uri.Builder builder = threadIdUri.buildUpon(); 
String[] recipients = {"9808","8808"}; 
for(String recipient : recipients){ 
    builder.appendQueryParameter("recipient", recipient); 
} 
Uri uri = builder.build(); 

現在,您可以以正常的方式查詢uri,這會給你一個thread_id,你可以使用指定的收件人,它將如果不創建一個新的ID存在或返回現有的。

Long threadId = 0; 
Cursor cursor = getContentResolver().query(uri, new String[]{"_id"}, null, null, null); 
if (cursor != null) { 
    try { 
     if (cursor.moveToFirst()) { 
      threadId = cursor.getLong(0); 
      } 
    } finally { 
      cursor.close(); 
    } 
} 

現在使用threadId插入您的短信。

有幾件事要注意。

不要使用此threadId爲任何99088808插入單一收件人的郵件,爲每個新的thread_id或只是做一個insert不指定thread_id

此外,非常小心的builder.appendQueryParameter(...)一部分,確保關鍵是recipient而不是recipients,如果你使用recipients它仍然可以工作,但你總是會得到相同的thread_id和您的所有短信將在一個線程結束。

+0

@vikki ..謝謝你...讓我檢查 – sarath

+0

@vikki ....對於所有的對話,它只創建一個線程ID ..我的密鑰只是收件人...我的代碼片段是String [] recipients = to_nums.toArray(new串[to_nums.size()]);; (字符串收件人:收件人) { builder.appendQueryParameter(「收件人」,收件人); } – sarath

+0

我不認爲你正在使用toArray,如果to_nums是一個字符串數組,然後只是迭代,你不需要將其轉換爲一個字符串[], – vikki

0

看起來你應該創建羣組消息一個新的線程,並將其插入新的線程,以及各個線程。

+0

嗨..我試圖把values.put(「thread_id」,33);新的線程ID;此後,我可以列出組對話但默認的短信應用程序沒有列出與新的threadid對話。 – sarath

+0

您是否使用內容解析器插入創建新線程並在消息中分配其ID? – tsmith

+0

下面的代碼我用來插入組短消息。內容值value = new ContentValues(); values.put(「address」,mobNo); values.put(「body」,msg); values.put(「thread_id」,33); ():content:// sms/sent「),values); – sarath