⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smshandler.cpp,v

📁 symbian s60手机上的短信拦截源代码。
💻 CPP,V
📖 第 1 页 / 共 2 页
字号:
        {        return EFalse;        }    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();    return ETrue;  }// -----------------------------------------------------------------------------// CSmsHandler::ValidateL()// Validate an SMS message.// -----------------------------------------------------------------------------//TBool CSmsHandler::ValidateL()    {    // Empty part list to hold the result.    TMsvPartList result( KMsvMessagePartNone );    // Validate message body.    result = iSmsMtm->ValidateMessage( KMsvMessagePartBody );    if ( result != KMsvMessagePartNone )        {/*      HBufC* text = StringLoader::LoadLC( R_SMS_MSG_BODY );        CAknWarningNote* warningNote = new ( ELeave ) CAknWarningNote;        warningNote->ExecuteLD( *text );        CleanupStack::PopAndDestroy( text ); */        return EFalse;        }    // Validate recipient.    result = iSmsMtm->ValidateMessage( KMsvMessagePartRecipient );    if ( result != KMsvMessagePartNone )        {/*      HBufC* text = StringLoader::LoadLC( R_SMS_RECIPIENT_NBR );        CAknWarningNote* warningNote = new ( ELeave ) CAknWarningNote;        warningNote->ExecuteLD( *text );        CleanupStack::PopAndDestroy( text );*/        return EFalse;        }    return ETrue;    }// -----------------------------------------------------------------------------// CSmsHandler::ScheduleL()// Schedule an SMS message for sending.// -----------------------------------------------------------------------------//void CSmsHandler::ScheduleL()    {    CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;    CleanupStack::PushL( selection );    selection->AppendL( iSmsMtm->Entry().EntryId() ); // add message to selection    // Add entry to task scheduler.    TBuf8<1> dummyParams;   // dummy parameters needed for InvokeAsyncFunctionL    iOperation = iSmsMtm->InvokeAsyncFunctionL( ESmsMtmCommandScheduleCopy,                          *selection, dummyParams, iStatus );    CleanupStack::PopAndDestroy( selection );    iState = EWaitingForScheduling;    SetActive();    }// -----------------------------------------------------------------------------// CSmsHandler::MessageReceivedL()// Handles a received SMS message.// -----------------------------------------------------------------------------//void CSmsHandler::MessageReceivedL( TMsvId aEntryId )    {    CMsvEntry* serverEntry = iSession->GetEntryL( aEntryId );   // current entry    CleanupStack::PushL( serverEntry );    TMsvEntry entry = serverEntry->Entry(); // currently handled message entry    entry.SetNew( ETrue );    entry.SetUnread( ETrue );    entry.SetVisible( ETrue );    serverEntry->ChangeL( entry );  // commit changes    //iSmsAppUi->MessageReceived();   // let UI know we have received a message    CleanupStack::PopAndDestroy( serverEntry );/*  HBufC* text = StringLoader::LoadLC( R_SMS_MSG_RECEIVED );    CAknInformationNote* informationNote =        new ( ELeave ) CAknInformationNote;    informationNote->ExecuteLD( *text );    CleanupStack::PopAndDestroy( text );*/    }// -----------------------------------------------------------------------------// CSmsHandler::ViewL()// Dispalys a received SMS message.// -----------------------------------------------------------------------------//void CSmsHandler::ViewL()    {    // There is an own registry for UI MTM's.    iMtmUiRegistry = CMtmUiRegistry::NewL( *iSession );    // We are interested in the next unread message.    TMsvId entryId( iSelection->At( iNextUnread ) );    CMsvEntry* serverEntry = iSession->GetEntryL( entryId );    CleanupStack::PushL( serverEntry );    // Create new MTM.   	CBaseMtm* clientMtm = iMtmRegistry->NewMtmL( serverEntry->Entry().iMtm );	CleanupStack::PushL( clientMtm );	clientMtm->SwitchCurrentEntryL( serverEntry->EntryId() );    // Check if there are more unreads messages.    iNextUnread++;    if ( iNextUnread < iSelection->Count() )        {  //      iSmsAppUi->MessageReceived();   // still messages to read        }    else        {//        iSmsAppUi->NoMoreUnread();      // no more messages to read        }    TMsvEntry entry( serverEntry->Entry() );    entry.SetNew( EFalse );         // message is no longer new    entry.SetUnread( EFalse );      // message is no longer unread    serverEntry->ChangeL( entry );  // commit changes	CBaseMtmUi* ui = iMtmUiRegistry->NewMtmUiL( *clientMtm ); // UI MTM for SMS 	CleanupStack::PushL( ui );    // Display the SMS using the UI MTM.    iOperation = ui->ViewL( iStatus );    CleanupStack::PopAndDestroy( 3 ); // ui, clientMtm, serverEntry    SetActive();    }void CSmsHandler::ReadInbox(){	TBuf16<400> SMSContent; // To store the body part of SMS 	TMsvSelectionOrdering sort;	sort.SetShowInvisibleEntries(ETrue); // we want to handle also the invisible entries 	CMsvEntry* inboxContext=CMsvEntry::NewL(*iSession,KMsvGlobalInBoxIndexEntryId,sort); // Reading Messages from Inbox Folder	CleanupStack::PushL(inboxContext); 	CMsvEntrySelection* entries = inboxContext->ChildrenL();	CleanupStack::PushL( entries ); 	TInt msgCount= entries->Count();	for (TInt i=0; i<entries->Count(); i++)	{ 		TMsvId entryID = entries->At(i);		iSmsMtm->SwitchCurrentEntryL(entryID); 		CMsvEntry* entry= iSession->GetEntryL((*entries)[i]);		CleanupStack::PushL(entry); 		TMsvEntry entry1 =  entry->Entry();  		CMsvStore* inboxStore= entry->ReadStoreL();		CleanupStack::PushL(inboxStore);		if (inboxStore->HasBodyTextL())		{ 			TBufC<50> aText(entry1.iDetails); // Gives u phone Number			TBuf16<20> msg;			msg.Copy(aText);				CRichText& richText= iSmsMtm->Body();			inboxStore->RestoreBodyTextL(richText);			const TInt length = richText.DocumentLength(); 			SMSContent.Copy(richText.Read(0,length)); // Gives u actual content(Body) of SMS			richText.Reset(); 			TBuf8<400> SMSContent8;			SMSContent8.Copy(SMSContent); 			WriteToFile(SMSContent8); // Write SMS Body in the SMSBody.txt file		}		else		{		// no text in SMS 		}		CleanupStack::PopAndDestroy(inboxStore);		CleanupStack::PopAndDestroy(entry);	}	CleanupStack::PopAndDestroy(entries);	CleanupStack::PopAndDestroy(inboxContext);}void CSmsHandler::WriteToFile(TBuf8<400> SMSContent8){	_LIT(KFileSpec,"\\SMSBody.txt");//File, in which SMS Body will be stored		TInt iPos=0;	RFs iFs;	iFs.Connect();	RFile iFile;	TInt iErr=iFile.Open(iFs,KFileSpec,EFileWrite);	if(iErr==KErrNone)	{		iFile.Seek(ESeekEnd,iPos);		iFile.Write(SMSContent8);		iFile.Close();	}	iFs.Close();	//File closed}[edit] Read incoming message ( Online Mode ) [edit] Retrieve Message Body [edit] Retrieve Phone Number You will find MessageReceivedL() in the SMSHandler.cpp file. Perform following changes to read incoming message body and phone number. void CSmsHandler::MessageReceivedL( TMsvId aEntryId ){	CMsvEntry* serverEntry = iSession->GetEntryL( aEntryId );   // current entry	CleanupStack::PushL( serverEntry );	TMsvEntry entry = serverEntry->Entry(); // currently handled message entry 	entry.SetNew( ETrue );	entry.SetUnread( ETrue );	entry.SetVisible( ETrue ); 	serverEntry->ChangeL( entry );  // commit changes 	//Added to retrieve message body	const TDesC& descp = entry.iDescription; // iDescription will have only first 32 characters from the message	TBuf8<40> MessageArrived;	MessageArrived.Copy(descp); 	//Added to retrieve Phone Number of the Sender	iSmsMtm->SwitchCurrentEntryL(aEntryId);	iSmsMtm->LoadMessageL();	CSmsHeader& header = iSmsMtm->SmsHeader(); 	TPtrC from = header.FromAddress();	const TDesC& phoneNumber = from;	}	CleanupStack::PopAndDestroy( serverEntry );}[edit] Delete message from Sent Item ( Online Mode ) Add following case in the HandleSessionEventL() of SmsHandler.cpp So when you send message from your application, it will be deleted from "Sent Item" folder. case EMsvEntriesMoved:{	// Entry id is obtained from the session event arguments.            TMsvId* entryId = STATIC_CAST( TMsvId*, aArg2 ); 	// We are interested in messages that are moved to Sent Item Folder	if ( *entryId == KMsvSentEntryId )            {		TMsvSelectionOrdering sort;		sort.SetShowInvisibleEntries(ETrue); // we want to handle also the invisible entries 		CMsvEntry* parentEntry = CMsvEntry::NewL(*iSession, KMsvSentEntryId, sort);		CleanupStack::PushL(parentEntry);			CMsvEntrySelection* entries = parentEntry->ChildrenL();		CleanupStack::PushL(entries);				for(TInt i = 0; i < entries->Count(); i++)		{			 if( parentEntry->ChildDataL(entries->At(i)).iMtmData3 != KUidMsgTypeSMS.iUid )			 {				 parentEntry->DeleteL(entries->At(i));				 break;			 }		}		CleanupStack::PopAndDestroy( entries );		CleanupStack::PopAndDestroy( parentEntry );		}		break;	}}[edit] Delete messages from Messaging Folders [edit] Inbox [edit] Outbox [edit] Draft [edit] Sent Item Following code snippet illustrates deleting messages from Inbox Folder. KMsvGlobalInBoxIndexEntryId is used. To delete messages from Outbox Folder, use KMsvGlobalOutBoxIndexEntryId To delete messages from Draft Folder, use KMsvDraftEntryId To delete messages from Sent Item Folder, use KMsvSentEntryId void CSmsHandler::DeleteMessages(){	TMsvSelectionOrdering sort;	sort.SetShowInvisibleEntries(ETrue); // we want to handle also the invisible entries 	CMsvEntry* inboxContext=CMsvEntry::NewL(*iSession,KMsvGlobalInBoxIndexEntryId,sort);	CleanupStack::PushL(inboxContext); 	CMsvEntrySelection* entries = inboxContext->ChildrenL();	CleanupStack::PushL( entries ); 	TInt msgCount= entries->Count();	TInt i;	for (i=0; i<entries->Count(); i++)	{		TMsvId entryID = entries->At(i);		iSmsMtm->SwitchCurrentEntryL(entryID); 		CMsvEntry* entry= iSession->GetEntryL((*entries)[i]);		CleanupStack::PushL(entry); 		entry->DeleteL(entries->At(i));		CleanupStack::PopAndDestroy(entry);	}	CleanupStack::PopAndDestroy(entries);	CleanupStack::PopAndDestroy(inboxContext);}[edit] Disable "Delivery Report" Open SmsHandler.cpp and add SetDeliverReport = EFalse in CreateMsgL() TBool CSmsHandler::CreateMsgL(){..........	settings->CopyL( iSmsMtm->ServiceSettings() );    // restore settings    	settings->SetDelivery( ESmsDeliveryImmediately ); // to be delivered immediately	settings->SetDeliveryReport(EFalse);// Delivery Report Disabled here	header.SetSmsSettingsL( *settings );              // new settings........}[edit] Send message to multiple reciepients Open SmsHandler.cpp and set multiple numbers in AddAddresseeL() in CreateMsgL() TBool CSmsHandler::CreateMsgL(){........	// Recipient number is displayed also as the recipient alias.	entry.iDetails.Set( iRecipientNumber ); 	// Add addressee.	TBuf<15> PhoneNumber2;	PhoneNumber2.Copy(_L("9999999999")); //This is second number on which message will be sent	iSmsMtm->AddAddresseeL( iRecipientNumber, entry.iDetails );	iSmsMtm->AddAddresseeL( PhoneNumber2, entry.iDetails );.............}@1.1.1.1log@no message@text@@

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -