11

我正在开发一个 android 短信应用程序。我可以使用以下代码向单个联系人发送短信。

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

现在我想向多联系人发送短信。有人建议使用循环。所以现在我正在使用循环向多联系人发送短信。

发送每条短信后,我将这些值写入发送表。

 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 表。如果我使用循环,那么它不会创建任何新的线程 id,因为发送地址 x 已经有线程 id 1 并且 y 已经有线程 id 2。所以消息将列在线程 id 1 和 2 下永远不会创建新的线程 id。

我试图手动插入线程ID

values.put("thread_id", 33);

但是随后新线程 id 下的消息未在默认应用程序中列出,而是在我的应用程序中列出。

请朋友帮帮我

编辑:我尝试使用0,然后读取生成的thread_id,然后用这个thread_id放置下一条短信,仍然不起作用。

4

2 回答 2

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插入单个收件人消息,为每个创建一个新的 thread_id 或只做一个而不指定.99088808insertthread_id

另外,要非常小心这个builder.appendQueryParameter(...)部分,确保密钥是recipient和不是recipients,如果你使用recipients它仍然可以工作,但你总是会得到相同的thread_id,你所有的短信都会在一个线程中结束。

于 2012-09-19T07:57:44.473 回答
0

看起来您应该为组消息创建一个新线程并将其插入到新线程以及各个线程中。

于 2012-09-06T17:49:33.747 回答