系统时间的事件处理可由类CEnvironmentChangeNotifier来处理,不过要自己封装处理该事件的方法。以下是具体是实现代码:
.h头文件
#ifndef CENVCHANGENOTIFIER_H_
#define CENVCHANGENOTIFIER_H_
#include <bacntf.h>
static TInt CallBackFunction(TAny *aPtr);
class CZDNoteEnvChangeNotifier : public CBase
{
public:
TInt ChangeL();
public:
static CZDNoteEnvChangeNotifier* NewL();
void ConstructL();
CZDNoteEnvChangeNotifier(MUiBase* aUiBase);
public:
virtual ~CZDNoteEnvChangeNotifier();
private:
TCallBack* iCallBack;
CEnvironmentChangeNotifier* iChangeNotifier;
};
static TInt CallBackFunction(TAny *aPtr) //回调函数定义为静态全局函数,供系统异步调用
{
CZDNoteEnvChangeNotifier* noteNotifier = static_cast<CZDNoteEnvChangeNotifier*>(aPtr);
return noteNotifier->ChangeL();
}
#endif /* CENVCHANGENOTIFIER_H_ */
.cpp实现文件
#include "EnvChangeNotifier.h"
CZDNoteEnvChangeNotifier* CZDNoteEnvChangeNotifier::NewL()
{
CZDNoteEnvChangeNotifier* self = new (ELeave)CZDNoteEnvChangeNotifier();
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop(self);
return self;
}
void CZDNoteEnvChangeNotifier::ConstructL()
{
//定义callback function
iCallBack = new (ELeave) TCallBack(CallBackFunction, this);
iChangeNotifier = CEnvironmentChangeNotifier::NewL(0, *iCallBack);
//开启异步方法请求,接收系统时间事件等
iChangeNotifier->Start();
}
CZDNoteEnvChangeNotifier::CZDNoteEnvChangeNotifier()
{
// TODO Auto-generated constructor stub
}
TInt CZDNoteEnvChangeNotifier::ChangeL()
{
TInt change = iChangeNotifier->Change();
if(change & EChangesSystemTime)
{
//如果系统时间被修改,则进行相应操作
}
return 1;
}
CZDNoteEnvChangeNotifier::~CZDNoteEnvChangeNotifier()
{
// TODO Auto-generated destructor stub
if(iChangeNotifier != NULL)
{
iChangeNotifier->Cancel();
delete iChangeNotifier;
iChangeNotifier = NULL;
}
if(iChangeNotifier != NULL)
{
delete iCallBack;
iCallBack = NULL;
}
}