C++ BB10-从cascades应用程序发送短信

C++ BB10-从cascades应用程序发送短信,c++,qml,blackberry-10,blackberry-cascades,C++,Qml,Blackberry 10,Blackberry Cascades,我使用以下代码从我的应用程序发送短信 void App::sendSms(const QString &messageText, const QStringList &phoneNumbers) { bb::pim::account::AccountService accountService; bb::pim::message::MessageService messageService; QList<Account> accountListy = account

我使用以下代码从我的应用程序发送短信

void App::sendSms(const QString &messageText, const QStringList &phoneNumbers) {
bb::pim::account::AccountService accountService;
bb::pim::message::MessageService messageService;

QList<Account> accountListy = accountService.accounts(bb::pim::account::Service::Messages,"sms-mms");

bb::pim::account::AccountKey smsAccountId = 0;
if(!accountListy.isEmpty()) {
    smsAccountId = accountListy.first().id();
    qDebug() << "SMS-MMS account ID:" << smsAccountId;
}
else {
    qWarning() << "Could not find SMS account";
    return;
}



QList<bb::pim::message::MessageContact> participants;
foreach(const QString &phoneNumber, phoneNumbers) {
    bb::pim::message::MessageContact recipient = bb::pim::message::MessageContact(
        -1, bb::pim::message::MessageContact::To,
        phoneNumber, phoneNumber);
    participants.append(recipient);
}

bb::pim::message::ConversationBuilder *conversationBuilder =
    bb::pim::message::ConversationBuilder::create();
conversationBuilder->accountId(smsAccountId);
conversationBuilder->participants(participants);

bb::pim::message::Conversation conversation = *conversationBuilder;
bb::pim::message::ConversationKey conversationId = messageService.save(smsAccountId, conversation);

bb::pim::message::MessageBuilder *builder =
    bb::pim::message::MessageBuilder::create(smsAccountId);
builder->conversationId(conversationId);

builder->addAttachment(bb::pim::message::Attachment("text/plain", "", messageText.toUtf8()));

foreach(const bb::pim::message::MessageContact recipient, participants) {
    builder->addRecipient(recipient);
}

bb::pim::message::Message message = *builder;

messageService.send(smsAccountId, message);

delete builder;
delete conversationBuilder;
void App::sendSms(常量QString和messageText、常量QStringList和电话号码){
bb::pim::account::AccountService AccountService;
bb::pim::message::MessageService MessageService;
QList accountListy=accountService.accounts(bb::pim::account::Service::Messages,“sms彩信”);
bb::pim::account::AccountKey smsAccountId=0;
如果(!accountListy.isEmpty()){
smsAccountId=accountListy.first().id();
qDebug()会话ID(会话ID);
生成器->添加附件(bb::pim::message::Attachment(“text/plain”,messageText.toUtf8());
foreach(const bb::pim::message::MessageContact收件人,参与者){
生成器->添加收件人(收件人);
}
bb::pim::message::message=*builder;
messageService.send(smsAccountId,message);
删除生成器;
删除conversationBuilder;
}

但是,每次它发送新短信时,都会在短信用户界面中创建一个新的线程。我想知道是否有办法将新消息添加到它将要发送到的号码的已存在线程中


谢谢!

导致此错误的代码方面是

// at top of file
using namespace bb::pim::messages;

ConversationBuilder *conversationBuilder = ConversationBuilder::create();
conversationBuilder->accountId(smsAccountId);
conversationBuilder->participants(participants);

Conversation conversation = *conversationBuilder;
ConversationKey conversationId = messageService.save(smsAccountId, conversation);
这篇文章遵循前面的内容,将为
参与者创建一个新的对话,而不考虑中心中以前存在的对话

为了解决这个问题,BlackBerry Cascades PIM MessageService提供了一个可用于根据任何
SearchFilterCriteria
筛选对话的服务。因此,请使用它

//Setup a filter
MessageFilter filter;
//Set our filter to filter conversations with id of the contact
filter.insert(MessageFilter::ContactId, contactId);
//Run filter
filterdConvosKeys = messageService.conversationKeys(smsAccountId, filter);

ConversationKey conversation_id;
//Vars for conversation builder
conversationBuilder->accountId(smsAccountId);
conversationBuilder->participants(participants);

//Get conversation ID for existing conversation, else create new
if (filterdConvosKeys.count() > 1) {
    // go through all conversations for this contact and choose
    // the conversation in which this contact is the sole participant
else if (filterdConvosKeys.count() == 1) {
    conversation_id = filterdConvosKeys[0].toAscii();
} else {
    conversation_id =  messageService.save(smsAccountId, conversation);
}
编辑 不管原版怎么说,我发现它有点问题。如果你完全按照它说的那样使用它,如果没有与联系人作为唯一参与者的对话,你总是会得到一个新的对话。我尝试在我的STL100-3上的BlackBerry Hub中搜索联系人的电话号码,我最终得到了许多信息相同的对话。但这意味着如果您按
MessageFilter::Participants
进行筛选,可能会返回许多对话。最好使用
MessageFilter::ContactId
进行筛选


p、 s:我给代码块命名了名称空间,因此
bb::pim::messages::
不会重复。

尝试创建一个消息视图,从中选择消息。该选择应该会触发一些
onSelected
插槽,其中包含一个
对话id
,您可以使用它来附加消息。这是直接从dome中选择的,但听起来不错。研究让我知道!我无意中找到了这个答案,通读了一遍,想+1。然后我意识到我就是那个回答这个问题的人