Хобрук: Ваш путь к мастерству в программировании

BB10 - Отправка SMS из каскадного приложения

Я использую следующий код для отправки SMS из своего приложения;

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;

}

Однако каждый раз, когда он отправляет новое SMS, он создает новый поток в пользовательском интерфейсе текстовых сообщений. Мне было интересно, есть ли способ добавить новое сообщение в уже существующую ветку для номера, на который оно будет отправлено?

Спасибо!


  • попробуйте иметь представление сообщений, из которого вы выбираете сообщение. выбор должен вызвать некоторый слот onSelected с conversation_id, который вы можете использовать для добавления к нему сообщений. это прямо из купола, но это звучит правильно. исследование и дайте мне знать 28.11.2013

Ответы:


1

Аспект вашего кода, который вызывает эту ошибку,

// 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);
}

Редактировать

Несмотря на то, что исходный Источник говорит, я нахожу это немного глючным. Если вы используете его точно так, как он говорит, вы всегда будете получать новый разговор, если нет разговора с контактом в качестве единственного участника. Я попытался выполнить поиск в BlackBerry Hub на моем STL100-3 с номером телефона контакта, и в итоге я получил много сообщений, которые были в одном и том же разговоре. Но это означает, что существует вероятность того, что многие разговоры будут возвращены, если вы отфильтруете их по MessageFilter::Participants. Фильтровать лучше с помощью MessageFilter::ContactId.

p.s: я разместил блоки кода в пространстве имен, поэтому bb::pim::messages:: не повторяется.

04.01.2014
  • Ой! Я наткнулся на этот ответ, прочитал и хотел +1. Потом я понял, что это я ответил на него ( ._.) 27.03.2014
  • Новые материалы

    Деревья классификации и регрессии
    Это мой второй пост об алгоритмах машинного обучения. Мой первый пост посвящен искусственным нейронным сетям, вы можете найти его ниже. Нейронные сети — базовое..

    HMTL - Многозадачное обучение для решения задач НЛП
    Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..