Question

Je me demande si quelqu'un a réussi à créer un code de travail pour l'envoi de messages binaires (pour configurer des téléphones Symbian) et dispose également d'un échantillon de données binaires. Jusqu'à présent, tous les échantillons que j'ai trouvés ne parviennent pas à quitter la boîte d'envoi ou ne reviennent jamais.

// Current entry is the Draft folder.
    iSmsMtm->SwitchCurrentEntryL( KMsvDraftEntryId );
    // Create a new SMS message entry as a child of the current context.
    iSmsMtm->CreateMessageL( KUidMsgTypeSMS.iUid );
    CMsvEntry& serverEntry = iSmsMtm->Entry();
    TMsvEntry entry( serverEntry.Entry() );

    /* Send Binary SMS */
    CSmsHeader &hdr = iSmsMtm->SmsHeader(); 
    CSmsMessage &msg = hdr.Message(); 
    CSmsPDU &pdu = msg.SmsPDU(); 
    CSmsUserData &userdata = pdu.UserData(); 

    // Set the DCS byte
    pdu.SetBits7To4(TSmsDataCodingScheme::ESmsDCSTextUncompressedWithNoClassInfo);
    pdu.SetAlphabet(TSmsDataCodingScheme::ESmsAlphabet8Bit);
    pdu.SetClass(ETrue, TSmsDataCodingScheme::ESmsClass2);

    char buf[]= {...}; //my binary data, 247 bytes long

    // Construct a dummy message
    HBufC8 * iMessage = HBufC8::NewL(300);

    TPtr8 TempUDHBufDesc((TUint8*)buf,247,247);
    iMessage->Des().Copy(TempUDHBufDesc);
    _LOGFENTRY1(_L("mess length %d"),iMessage->Des().Length());
    userdata.SetBodyL(*iMessage); 
    delete iMessage; 

    // Message will be sent immediately.
    entry.SetSendingState( KMsvSendStateWaiting );

    entry.iDate.UniversalTime(); // insert current time //Solution for HomeTime()
    // Set the SMS message settings for the message.
    CSmsHeader& header = iSmsMtm->SmsHeader();
    CSmsSettings* settings = CSmsSettings::NewL();
    CleanupStack::PushL( settings );

    settings->CopyL( iSmsMtm->ServiceSettings() ); // restore settings
    settings->SetDelivery( ESmsDeliveryImmediately ); // to be delivered immediately
    settings->SetDeliveryReport(EFalse);
    settings->SetCharacterSet(TSmsDataCodingScheme::ESmsAlphabet8Bit); // IMPORTANT! For sending binary SMS
    header.SetSmsSettingsL( *settings ); // new settings

    // Let's check if there is a service center address.
    if ( header.Message().ServiceCenterAddress().Length() == 0 )
    {
        // No, there isn't. We assume there is at least one service center
        // number set and use the default service center number.
        CSmsSettings* serviceSettings = &( iSmsMtm->ServiceSettings() );
        // Check if number of service center addresses in the list is null.
        if ( !serviceSettings->ServiceCenterCount() )
        {        _LOGENTRY("No SC");
            return ; // quit creating the message
        }
        else
        {
            CSmsNumber* smsCenter= CSmsNumber::NewL();
            CleanupStack::PushL(smsCenter);
            smsCenter->SetAddressL((serviceSettings->GetServiceCenter( serviceSettings->DefaultServiceCenter())).Address());
            header.Message().SetServiceCenterAddressL( smsCenter->Address() );
            CleanupStack::PopAndDestroy(smsCenter);
        }
    }

    CleanupStack::PopAndDestroy( settings );

    // Recipient number is displayed also as the recipient alias.
    entry.iDetails.Set( _L("+3725038xxx") );
    iSmsMtm->AddAddresseeL( _L("+3725038xxx") , entry.iDetails );

    // Validate message.
    if ( !ValidateL() )
    {    _LOGENTRY("Not valid");
        return ;
    }

    entry.SetVisible( ETrue ); // set message as visible
    entry.SetInPreparation( EFalse ); // set together with the visibility flag
    serverEntry.ChangeL( entry ); // commit changes 
    iSmsMtm->SaveMessageL(); // save message

    TMsvSelectionOrdering selection;
    CMsvEntry* parentEntry = CMsvEntry::NewL( iSmsMtm->Session(), KMsvDraftEntryId, selection );
    CleanupStack::PushL( parentEntry );

    // Move message to Outbox.
    iOperation =parentEntry->MoveL( entry.Id(), KMsvGlobalOutBoxIndexEntryId, iStatus );

    CleanupStack::PopAndDestroy( parentEntry );

    iState = EWaitingForMoving;
    SetActive();

Généralement, je ne suis pas sûr des valeurs correctes pour le port et la classe. De plus, il serait bien d’avoir une chaîne binaire correcte pour les tests. Maintenant, je ne suis pas sûr si le code est mauvais ou les données.

Était-ce utile?

La solution 2

La solution qui a fonctionné consiste à utiliser RComm et "DATAPORT :: 1". pour envoyer le SMS binaire en utilisant les commandes AT (comme en utilisant un modem)

Autres conseils

Utilisez la spécification JSR120 et le toolkit sans fil. ils contiennent du code exemple Java qui fonctionnera à coup sûr.

Celles-ci sont implémentées directement à l'aide d'objets RSocket dans Symbian C ++.

Si vous voulez vraiment le faire en C ++, le moyen le plus simple est de copier votre TMsvEntry dans l'entrée du service SMS. Dans votre code ci-dessus, cela signifie que vous utilisez " iSmsMtm- > ServiceId () " au lieu de "KMsvGlobalOutBoxIndexEntryId". De plus, copiez simplement le message sur le service, mais déplacez-le dans la boîte d'envoi après son envoi.

fiche éhontée: http://www.quickrecipesonsymbianos.com contiendra une explication de la messagerie Symbian C ++. API sera un exemple de code simple et réutilisable.

Si vous souhaitez envoyer le SMS en mode silencieux (et éviter la complexité liée à l'utilisation des API de messagerie), vous devez l'envoyer via un RSocket : http://wiki.forum.nokia.com/index.php/How_to_send_an_SMS_using_sing_sing

En fonction de vos besoins, cela pourrait être plus approprié que d'utiliser les API de messagerie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top