BB10-从级联应用程序发送短信
BB10 - Sending SMS from cascades app
我正在使用以下代码从我的应用程序发送短信;
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;
}
然而,每当它发送新的短信时,它都会在短信UI中创建一个新的线程。我想知道是否有一种方法可以将新消息添加到它要发送到的号码已经存在的线程中?
谢谢!
导致此错误的代码方面是
// 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);
这篇文章——按照前面的几行,将为participants
创建一个新的对话,而不考虑集线器中以前的现有对话。
为了解决这个问题,BlackBerry Cascades PIM MessageService提供了一个MessageSearchFilter
,您可以使用它来过滤任何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);
}
编辑
不管最初的来源怎么说,我觉得它有点bug。如果你完全按照它说的那样使用它,那么如果没有与作为唯一参与者的联系人进行对话,你总是会以新的对话结束。我试着在我的STL100-3上的BlackBerry Hub中用一个联系人的电话号码进行搜索,结果我收到了许多在同一对话中的消息。但这意味着,如果按MessageFilter::Participants
进行筛选,则可能会返回许多对话。最好使用MessageFilter::ContactId
进行过滤。
p.s:我为代码块命名了名称,这样bb::pim::messages::
就不会重复了。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 每次b/c程序无法加载级联时,使用harr级联的人脸识别都会失败
- 带有级联或 SVM 分类器的 HOG.C++ OpenCV (V2.4.5) 中的程序
- 如何使用户级应用程序通过管道与根级应用程序通信
- BB10-从级联应用程序发送短信
- 适用于应用程序级集合的适当体系结构
- "相机正在使用中。关闭使用它的所有应用程序,然后重试。在黑莓 Z10 中调用黑莓 10 级联中的相机时
- 项目级宏添加到应用程序级target_link_libraries
- 为什么内联SQL不适合包含在应用程序中
- 您是否可以拥有一个具有管理员权限的DLL,该DLL从仅具有用户级权限的客户端应用程序链接
- android/opencv-从NDK中的应用程序文件夹加载级联文件
- 64位应用程序和内联汇编
- 具有约束的向量的向量上合并成员函数的级联应用
- c++程序对任务栏中的平铺/级联窗口没有响应