Deleting an incoming SMS message using Symbian C++
Article Metadata
Tested with
Devices(s): Nokia 5800 XpressMusic
Compatibility
Platform(s): S60 3rd Edition
S60 5th Edition
S60 5th Edition
Article
Keywords: CMsvSession, CMsvEntry, TMsvId
Created: tepaa
(05 May 2009)
Last edited: hamishwillee
(13 Jun 2012)
Contents |
Overview
This snippet demonstrates how to delete an incoming SMS message from the inbox folder.
MMP file
The following libraries and capabilities are required:
CAPABILITY ReadUSerData WriteUserData UserEnvironment
LIBRARY msgs.lib
LIBRARY smcm.lib
LIBRARY gsmu.lib
Header file
#include <e32base.h>
#include <msvapi.h> // MMsvSessionObserver
#include <msvids.h> // Folder Ids
#include <smut.h> // KUidMsgTypeSMS
class CYourSmsEngine : public CBase
{
public:
static CYourSmsEngine* NewL();
static CYourSmsEngine* NewLC();
virtual ~CYourSmsEngine();
private:
void HandleSessionEventL(TMsvSessionEvent aEvent,
TAny* aArg1, TAny* aArg2, TAny* aArg3);
private:
void ConstructL();
CYourSmsEngine();
private:
// Message body
TBuf<KSmsMessageLength> iMessage;
// Address (phonenumber)
TBuf<KAddressLength> iAddress;
// Session with the messaging server
CMsvSession* iMsvSession;
// CMsvEntry accesses and acts upon a particular Message Server entry
CMsvEntry* iMsvEntry;
// Id of a new message
TMsvId iNewMessageId;
};
Source file
#include "cyoursmsengine.h"
#ifdef __WINS__
const TMsvId KObservedFolderId = KMsvDraftEntryId;
#else
const TMsvId KObservedFolderId = KMsvGlobalInBoxIndexEntryId;
#endif
const TMsvId KInbox = KMsvGlobalInBoxIndexEntryId;
CYourSmsEngine* CYourSmsEngine::NewL()
{
CYourSmsEngine* self = NewLC();
CleanupStack::Pop(self);
return self;
}
CYourSmsEngine* CYourSmsEngine::NewLC()
{
CYourSmsEngine* self = new (ELeave) CYourSmsEngine();
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
void CYourSmsEngine::ConstructL()
{
// SMS automatic receiving needs a session to the messaging server
iMsvSession = CMsvSession::OpenAsyncL(*this);
}
CYourSmsEngine::CYourSmsEngine()
{
}
CYourSmsEngine::~CYourSmsEngine()
{
delete iMsvEntry;
if (iMsvSession)
iMsvSession->Cancel();
delete iMsvSession;
}
void CYourSmsEngine::HandleSessionEventL(
TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* /*aArg3*/)
{
switch (aEvent)
{
case EMsvServerReady:
{
// Initialise iMsvEntry
if (!iMsvEntry)
{
iMsvEntry = CMsvEntry::NewL(*iMsvSession, KInbox,
TMsvSelectionOrdering());
}
break;
}
case EMsvEntriesCreated:
{
// Only look for changes in the Inbox
if (aArg2 && *(static_cast<TMsvId*>(aArg2)) == KObservedFolderId)
{
CMsvEntrySelection* entries =
static_cast<CMsvEntrySelection*>(aArg1);
if( entries->Count() >= 1 )
iNewMessageId = entries->At(0);
else
return;
}
break;
}
case EMsvEntriesChanged:
{
// Look for changes. When using the emulator
// observed folder is drafts, otherwise inbox
if (aArg2 && *(static_cast<TMsvId*>(aArg2)) == KObservedFolderId)
{
CMsvEntrySelection* entries =
static_cast<CMsvEntrySelection*>(aArg1);
if(!entries && entries->Count() < 1 )
{
return;
}
else if (iNewMessageId == entries->At(0))
{
if( !iMsvEntry )
return;
// Set entry context to the new message
iMsvEntry->SetEntryL(iNewMessageId);
// Check the type of the arrived message and
// that the message is complete
// Only SMS's are our consern
if (iMsvEntry->Entry().iMtm != KUidMsgTypeSMS ||
!iMsvEntry->Entry().Complete())
return;
// Delete message from this Inbox-folder
iMsvEntry->DeleteL(iMsvEntry->EntryId());
}
}
break;
}
}
}
Postconditions
The incoming SMS message is deleted.


Please inherit public MMsvSessionObserver in your respective .h file.