문제

누군가가 이진 메시지를 전송하기위한 작업 코드를 만들고 (심비안 전화를 구성하기 위해) 일부 이진 데이터 샘플을 가지고 있는지 궁금합니다. 지금까지 내가 찾은 모든 샘플은 소장을 떠나지 않거나 절대 돌아 오지 않습니다.

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

대부분 포트와 클래스의 올바른 값에 대해 잘 모르겠습니다. 또한 올바른 바이너리 스트링은 테스트에 좋을 것입니다. 이제 TheCode가 나쁜지 또는 데이터인지 확실하지 않습니다.

도움이 되었습니까?

해결책 2

작동하는 솔루션은 RCOMM 및 "DataPort :: 1"을 사용하여 AT 명령을 사용하여 이진 SMS를 전송하는 것입니다 (모뎀 사용).

다른 팁

JSR120 사양과 무선 툴킷을 사용하십시오. 여기에는 확실히 작동 할 Java 예제 코드가 포함되어 있습니다.

이들은 Symbian C ++에서 rsocket 객체를 사용하여 직접 구현됩니다.

C ++로 실제로하고 싶다면 가장 간단한 방법은 TMSVentry를 SMS 서비스 입력에 복사하는 것입니다. 위의 코드에서 "kmsvglobaloutboxindexentryid"대신 "ismsmtm-> service ()"을 사용하는 것을 의미합니다. 또한 메시지를 서비스에 복사하되 성공적으로 전송 된 후에는 소장으로 옮기십시오.

뻔뻔한 플러그 : http://www.quickrecipesonsymbianos.com Symbian C ++ 메시징 API에 대한 설명이 포함되어있어 간단하고 재사용 가능한 예제 코드가 포함됩니다.

SMS를 조용히 보내려면 (메시징 API를 사용하는 복잡성을 피하기 위해) RSocket: http://wiki.forum.nokia.com/index.php/how_to_send_an_sms_using_sockets

귀하의 요구에 따라 메시징 API를 사용하는 것보다 더 적합 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top