我正在开发一个android sms应用程序。我可以使用以下代码将短信发送给单个联系人。
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
现在我想发送短信到multicontacts.Some建议使用loop.SO现在我使用循环发送短信到multicontact。
发送每个短信后,我将这些值写入发送表。
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.如果我想将sms发送到x和y,那么我该如何写入sms / sent表。
如果我使用Loop,那么它将不会创建任何新的线程ID,因为发送地址x已经具有线程id 1并且y已经具有线程id 2.So消息将在线程id 1和2下列出从不创建新线程id。
我试图手动插入线程ID
values.put("thread_id", 33);
但是新线程ID下的消息没有列在默认应用程序中,而是列在我的应用程序中。
请帮帮我的朋友
编辑:我尝试使用0,然后读取生成的thread_id,然后使用此thread_id放置下一个短信,仍然无法正常工作。
你需要创建一个新的 thread_id
手动,正常 contentResolver.insert(...)
不会对多个收件人邮件做。创造新的 thread_id
您查询以下uri
content://mms-sms/threadID
并附加必要的收件人,以便最终看起来像这样
content://mms-sms/threadID?recipient=9808&recipient=8808
所以完整的例子看起来像这样。说收件人是 9808
和 8808
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或返回现有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
为任一个插入单个收件人邮件 9908
要么 8808
,为每个创建一个新的thread_id或只是做一个 insert
没有指定 thread_id
。
另外,要非常小心 builder.appendQueryParameter(...)
部分,确保关键是 recipient
并不是 recipients
,如果你使用 recipients
它仍然可以工作,但你总会得到相同的 thread_id
并且所有的短信都将以一个帖子结束。
看起来你应该为组消息创建一个新线程,并将其插入到新线程以及各个线程中。