使用RSendAs发送短消息
文章信息
兼容于
平台: S30 3rd Edition
文章
关键词: RSendAs
由 User:Davey 2
在 26 Dec 2007 创建
最后由 hamishwillee
在 20 Oct 2011 编辑
适用版本:
Series60 3rd Edition
解决方案:
在OS9.x中发送短消息最方便的方法就是RSendAs了,仅仅需要传入消息的接收者和消息正文,其他的交给RSendAs完成。
但是对于中文短消息应用这个方法却不适用,因为使用RSendAs发送短信,使用的都是默认的设置,并且不能修改,消息正文都会转换成7-bit-sms的格式,所有不是以7-bit-sms格式定义的字符都以问号代替,中文就不是以7-bit-sms格式定义的,因此使用RSendAs发送的短信都显示为问号,这点必须注意。
以下的代码演示了如何使用RSendAs:
CPP文件:
CRSendAsSender* CRSendAsSender::NewL(MRSendSMSObserver& aObserver,const TDesC& aMessage,const TDesC& aRecipients) {
CRSendAsSender* self = new(ELeave)CRSendAsSender(aObserver);
self->ConstructL(aMessage,aRecipients);
return self;
}
CRSendAsSender::CRSendAsSender(MRSendSMSObserver& aObserver):CActive(0),iObserver(aObserver) {
}
CRSendAsSender::~CRSendAsSender() {
Cancel();
iSendAsMessage.Close();
iSendAs.Close();
}
void CRSendAsSender::ConstructL(const TDesC& aMessage,const TDesC& aRecipients) {
CActiveScheduler::Add(this);
User::LeaveIfError(iSendAs.Connect());
iSendAsMessage.CreateL(iSendAs, KUidMsgTypeSMS);
iSendAsMessage.AddRecipientL(aRecipients, RSendAsMessage::ESendAsRecipientTo);
iSendAsMessage.SetBodyTextL(aMessage);
iSendAsMessage.SendMessage(iStatus);
SetActive();
}
void CRSendAsSender::DoCancel() {
iSendAsMessage.Cancel();
}
void CRSendAsSender::RunL() {
iObserver.MessageSentL(iStatus.Int());
}
头文件:
#include <e32base.h>
#include <F32FILE.H>
#include <BADESCA.H>
#include <rsendasmessage.h>
#include <rsendas.h>
#include <MTCLREG.H>
class MRSendSMSObserver {
public:
virtual void MessageSentL(TInt aError) = 0;
};
class CRSendAsSender : public CActive {
public:
static CRSendAsSender* NewL(MRSendSMSObserver& aObserver,const TDesC& aMessage,const TDesC& aRecipients);
~CRSendAsSender();
protected:
void DoCancel();
void RunL();
private:
CRSendAsSender(MRSendSMSObserver& aObserver);
void ConstructL(const TDesC& aMessage,const TDesC& aRecipients);
private:
MRSendSMSObserver& iObserver;
RSendAs iSendAs;
RSendAsMessage iSendAsMessage;
};


(no comments yet)