سؤال

وأنا أتساءل عما إذا كان أي شخص قد تمكن من إنشاء رمز العمل لإرسال رسائل الثنائية (تكوين هواتف سيمبيان) وأيضا بعض عينة البيانات الثنائية. وحتى الآن فشلت جميع العينات لقد وجدت لترك علبة الصادر أو لا يعود أبدا.

// 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 و "منفذ بيانات :: 1" لترسل SMS ثنائي باستخدام AT الأوامر (مثل استخدام مودم).

نصائح أخرى

استخدم مواصفات JSR120 وأدوات لاسلكية. أنها تحتوي على رمز المثال جافا التي ستعمل بالتأكيد.

تنفذ

وهذه مباشرة باستخدام كائنات RSocket في سيمبيان C ++.

إذا كنت تريد حقا أن تفعل ذلك في C ++، وأبسط طريقة لنسخ TMsvEntry لدخول خدمة الرسائل القصيرة. في التعليمات البرمجية أعلاه، وهذا يعني استخدام "iSmsMtm-> ServiceId ()" بدلا من "KMsvGlobalOutBoxIndexEntryId". أيضا، مجرد نسخ الرسالة إلى الخدمة ولكن لم نقله إلى صندوق الحفظ بعد أن تم إرساله بنجاح.

ووقح المكونات: http://www.quickrecipesonsymbianos.com سيتضمن شرحا لسيمبيان C ++ الرسائل API سوف بسيطة وقابلة لإعادة الاستخدام المثال رمز.

إذا كنت تريد إرسال SMS بصمت (وتجنب تعقيد باستخدام واجهات برمجة التطبيقات والرسائل)، يجب إرسالها عبر RSocket: <لأ href = "http://wiki.forum.nokia.com/index. فب / How_to_send_an_SMS_using_sockets "يختلط =" نوفولو noreferrer "> http://wiki.forum.nokia.com/index.php/How_to_send_an_SMS_using_sockets

واعتمادا على احتياجاتك وهذا قد يكون أكثر ملاءمة من استخدام واجهات برمجة التطبيقات الرسائل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top