我想知道是否有人設法創建一個發送二進制消息(配置Symbian手機)的工作代碼,並且還有一些二進制數據樣本。 到目前爲止,我發現的所有樣本都無法離開發件箱或永遠不會返回。Symbian中的二進制短信
// 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();
大部分我不確定端口和類的正確值。還有一些正確的二進制字符串將是很好的測試。現在我不確定代碼是壞的還是數據。
根據我的回答,使用「iSmsMtm-> ServiceId()」將消息複製到服務條目 – 2009-01-12 13:25:34
好的,我試試。 我想知道什麼是正確的端口和短信類(class1,class2)使用。 – Riho 2009-01-13 11:54:33