Frage

Ich frage mich, ob jemand einen funktionierenden Code erstellen zum Aussenden Binärmeldungen (konfigurieren Symbian-Handys) und haben auch einige binäre Daten Probe geschafft hat. Bisher alle Proben die ich gefunden habe nicht den Postausgang oder nie wieder zurückkehren lassen.

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

Meistens bin ich über die richtigen Werte für Port und Klasse nicht sicher. Auch einige richtige Binärkette wäre schön, für den Test zu haben. Jetzt bin ich nicht sicher, ob theCode schlecht ist oder die Daten.

War es hilfreich?

Lösung 2

Die Lösung, die funktioniert ist RComm zu verwenden und „Dataport :: 1“, um die binäre SMS AT-Befehle zu versenden (wie ein Modem).

Andere Tipps

Mit der JSR120-Spezifikation und das Wireless Toolkit. sie enthalten Java-Beispielcode, sicher zu arbeiten.

Diese werden implementiert direkt RSocket Objekte in Symbian C ++.

Wenn Sie es wirklich in C ++ tun wollen, ist der einfachste Weg, um Ihre TMsvEntry auf die Eingabe des SMS-Dienstes zu kopieren. In Ihrem Code oben, das bedeutet "iSmsMtm-> serviceid ()" statt "KMsvGlobalOutBoxIndexEntryId" verwenden. auch, nur die Nachricht an den Dienst kopieren, sondern es in die outbox verschiebe, nachdem sie erfolgreich gesendet wurde.

schamlose Werbung: http://www.quickrecipesonsymbianos.com wird eine Erklärung der Symbian C ++ enthalten Messaging API wird einfach und wieder verwendbarer Beispielcode.

Wenn Sie die SMS lautlos senden möchten (und zu vermeiden, dass die Komplexität der Verwendung der Messaging-APIs), sollten Sie es über eine RSocket senden: http://wiki.forum.nokia.com/index.php/How_to_send_an_SMS_using_sockets

Je nach Bedarf könnte dies besser geeignet sein als das Messaging-APIs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top