Jumping Jack Flash weblog

Appunti di gestione SMS in Symbian c++

Posted in Symbian by jumpjack on 22 gennaio 2007

ESEMPI? http://developer.symbian.com/main/oslibrary/osdocs/symbian70/index.jsp
Modificare messaggi già arrivati: http://symbianexample.com/preprocessing_the_incoming_message

Creare un nuovo MMS:
// Create message server session
iMsvSession = CMsvSession::OpenSyncL(*this);
// Create client registry object
iClientMtmRegistry = CClientMtmRegistry::NewL(*iMsvSession);
// Request MMS client MTM object
iMmsClientMtm = (CMmsClientMtm*)iClientMtmRegistry->NewMtmL(KUidMsgTypeMMS);

Accesso agli SMS – inizializzazione:
CMsvSession* iSession = CMsvSession::OpenSyncL(*this);
CClientMtmRegistry* iMtmReg = CClientMtmRegistry::NewL(*iSession);
CSmsClientMtm* iSmsMtm = static_cast(iMtmReg->NewMtmL(KUidMsgTypeSMS));

La funzione SendingState di TMsvEntry mostra lo stato di un mex (in TMsvSendState )
La funzione SetSendingState di TMsvEntry imposta lo stato di un mex; forse va poi seguita da CMsvEntry::ChangeL() o da CMsvEntry:CHangeEntryL();
Il tipo TSmsDelivery forse imposta il default-state dei messaggi nuovi.
La funzione CSmsSettings.SetDelivery() imposta i parametri di default di un SMS secondo i valori TSmsDelivery (Send immediately, send on client request, send at scheduled time )
La funzione CSmsSettings.Delivery() mostra quanto sopra.

I messaggi sono memorizzati nel file INDEX (le loro proprietà) e nel “message store” (contenuto vero e proprio). Un elemento del “message store” è rappresentato dall’oggetto CMsvStore . Un elemento dell’ INDEX è rappresentato dall’oggetto TMsvEntry .

E’ possibile creare sotto-folder nei folder dei messaggi! » Developer Library » Symbian OS Guide » C++ API guide » Messaging » Using Messaging » The Message Server » Message folders

Un messaggio può essere creato senza per questo richiamare l’editor mesaggi “ufficiale”.

E’ il sistema a gestire i messaggi in arrivo, non il programma Messaggi. Quindi forse si puo’ scrivere semplicemente un programma esterno che legge i mex e li riorganizza in cartelle e sottocartelle, mentre per spedirli si puo’ usare il programma standard. Ma comunque mandarli dovrebbe essere molto semplice, tramite la classe CSendAs e MSendAsObserver .

User Interface MTM (CBaseMtmUi): Per vedere e modificare messaggi
Client-side MTM (CBaseMtm): interfaccia tra rappresentazione interna e rappresentazione “all’utente”

classe CSmsMessageSettings – Impostazioni relative a SINGOLO messaggio.

CSmsSettings – Impostazioni GLOBALI:
SetDelivery() imposta TSmsDelivery a ESmsDeliveryImmediately, ESmsDeliveryUponRequest o ESmsDeliveryScheduled .

Struttura:
C’e’ un INDEX globale che conteiene messaggi e folder: ognuno è un CMsvEntry; ogni Entry ha vari campi: ID è univioco per ogni entry; Type definisce se è un folder, un messaggio, un servizio o un attachment)
Proprietà di un entry: » Developer Library » API Reference » C++ API reference » SMS Client MTM » TMsvEntry functions and members used in SMS message entries

———–
Contare tutti i messaggi non letti:

CMsvEntry* entry = CMsvEntry::NewL(*iMsvSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
CleanupStack::PushL(entry);
CMsvEntrySelection* entries = entry->ChildrenL();
CleanupStack::PushL(entries);
TInt nCount;
for(TInt i=0; i Count(); i++)
{
entry->SetEntryL(entries->At(i));
TMsvEntry msvEntry(entry->Entry());
nCount++ = msvEntry.Unread()? 1:0;
}
CleanupStack::PopAndDestroy(2);

OPPURE:
#include msvstd.h // msgs.lib
#include msvapi.h //msgs.lib
#include mtclreg.h // msgs.lib
#include SMSCLNT.h //smcm.lib

CMsvSession* iSession = CMsvSession::OpenSyncL(*this); //#include msvapi.h //msgs.lib
CClientMtmRegistry* iMtmReg = CClientMtmRegistry::NewL(*iSession); //#include mtclreg.h // msgs.lib
CSmsClientMtm* iSmsMtm = static_cast(iMtmReg->NewMtmL(KUidMsgTypeSMS)); //#include SMSCLNT.h //smcm.lib

TMsvEntry msvEntry; //#include msvstd.h // msgs.lib
CSmsClientMtm* smsMtm = pView->pMsgHandler->iSmsMtm; // #include SMSCLNT.h //smcm.lib
CMsvEntrySelection* entries; // #include msvstd.h // msgs.lib
smsMtm->SwitchCurrentEntryL(KMsvGlobalInBoxIndexEntryId);
entries = smsMtm->Entry().ChildrenWithMtmL(KUidMsgTypeSMS);
CleanupStack::PushL(entries);
numMessages = entries->Count();
while(count > 0 )
{
current = (*entries)[–count];
smsMtm->SwitchCurrentEntryL(current);
smsMtm->Entry().Entry().
iSession->GetEntry(current,serviceid, msvEntry);
if (msvEntry.Unread() )
{
// DO SOMETHING
}
}

————-
Scheduling di un messaggio:
Then, to schedule a message you should, in TMsvEntry, set the following:
SetScheduled(ETrue);
SetSendingState(KMsvSendStateScheduled);

Then set the iDate to the date & time you want the message to send out;

————–
Leggere data di un messaggio:

TTime msgTime=msvEntry.iDate;

TDateTime msgDateTime = msgTime.DateTime();

TBuf timeBuf ;

timeBuf.Format(KTimeDateFormat ,msgDateTime.Hour(),msgDateTime.Minute(),msgDateTime.Second(),msgDateTime.Day(),msgDateTime.Month(),msgDateTime.Year());

_LIT (KTimeDateFormat, “%d:%d:%d %d/%d/%d”);

———————————-
http://forum.nokia.com/document/Forum_Nokia_Technical_Library_v1_35/contents/FNTL/Custom-created_message_left_in_Outbox.htm

Custom-created message left in Outbox
KIS000308

Overview
A custom-created message is left in Outbox with status “waiting.”

Reported against S60 3rd Edition

Date identified December 22, 2005

Symptoms

Detailed description

This is a known issue that impacts all custom messaging applications, in other words, applications that create and send messages using the functions of CMsvEntry, TMsvEntry, and a client MTM.

This issue can be reproduced by creating and scheduling a message to be sent immediately. The message may be left in the Outbox with the status “waiting” for a period of time specified by the iDate member of your message entry’s TMsvEntry object.

How to reproduce

Solution

The solution to this problem is to set your TMsvEntry’s iDate to the Universal Time (by calling iDate.UniversalTime()). The messaging server will calculate the difference between the local time and the (universal) time stamp of the message entry and schedule the entry accordingly.

Importazione progetto in carbide.c++

Posted in Symbian by jumpjack on 20 gennaio 2007

Importazione progetto Symbian .mmp in carbide.c++

Importare un progetto Symbian c++ in Carbide.c++

Cliccare sul menu file–>import:

Selezionare “Symbian MMP file”:

Specificare il percorso del file e premere ok; comparirà questa finestra, in cui bisognerà spuntare la checkbox “UIQ_21”:

Il progetto verrà importato e comparirà nella lista dei progetti (in questa immagine il progetto appena importato si chiama “executable”, e sono già presenti altri 3 progetti):

Occorre ora specificare il “target” di compilazione (telefono vero o emulatore), modificando le proprietà del progetto:

Cliccare su C/C++ Build:

Comparirà questa schermata, in cui è possibile scegliere il target:

Adesso si può compilare (“build”) il progetto:

Dopo un susseguirsi di scritte più o meno incomprensibili nella finestra di output…

… alla fine si otterrà il programma compilato.
Se è stato compilato per l’emulatore, basterà avviare l’emulatore e da lì avviare il programma, oppure automatizzare la cosa:

Premendo il tasto NEW, verrà aggiunto un elemento all’elenco, e avviato il programma nell’emulatore. La volta successiva ovviamente non servirà di premere NEW, ma basterà premere il tasto RUN in basso a destra.

NOTA BENE: dopo ogni modifica al sorgente, occorre rifare un BUILD, ma PRIMA bisogna SALVARE il sorgente, che non viene salvato in automatico!



Indice degli appunti di programmazione:

Appunti di programmazione in ambiente Symbian C++
Usare Carbide.c++
Importare un progetto in Carbide.c++ da un file .MMP
Compilare un eseguibile Symbian .exe multiplatform
Appunti di programmazione PersonalJava
Compilare un’applicazione PersonalJava, creare i file .APP, .AIF e .TXT per lanciarla, e installarla sull’emulatore.  
Appunti di programmazione Java Midlet