CS001120
开发伙伴平台:
S60 3rd Edition
详细描述
RASCliSession提供了一个简单有效的方法可以用来检测闹铃服务事件。包括对闹铃的修改事件触发等。这里包括时钟和日历闹铃的处理。
这个代码片段需要ReadUserData, WriteUserData, ReadDeviceData和WriteDeviceData能力。这里光自签名是执行不了的需要开发者证书才行。
Contents
[hide]
1 MMP文件
2 头文件
3 源文件
4 后记
[edit] MMP文件
需要下列能力和链接库:
CAPABILITY ReadUserData WriteUserData ReadDeviceData WriteDeviceData
LIBRARY alarmclient.lib LIBRARY alarmshared.lib
[edit] 头文件
#include <e32base.h>
#include <ASCliSession.h>
class CCalAlarmObserver : public CActive
{
public:
void ConstructL();
CCalAlarmObserver();
~CCalAlarmObserver();
protected:
void DoCancel();
void RunL();
private:
void StartMonitoring();
private:
MMyLogCallBack& iCallBack;
RASCliSession iASCliSession;
TAlarmId iAlarmId;
};
[edit] 源文件
#include <ASShdDefs.h>
#include <ASShdAlarm.h>
CCalAlarmObserver::CCalAlarmObserver():CActive(EPriorityStandard)
{}
CCalAlarmObserver::~CCalAlarmObserver()
{
Cancel();
iASCliSession.Close();
}
void CCalAlarmObserver::ConstructL()
{
CActiveScheduler::Add(this);
iASCliSession.Connect();
StartMonitoring();
}
void CCalAlarmObserver::StartMonitoring()
{
iASCliSession.NotifyChange(iStatus, iAlarmId);
SetActive();
}
void CCalAlarmObserver::RunL()
{
switch(iStatus.Int())
{
case EAlarmChangeEventState:
break;
case EAlarmChangeEventStatus:
break;
case EAlarmChangeEventCharacteristics:
break;
case EAlarmChangeEventAlarmDeletion:
break;
case EAlarmChangeEventAlarmAddition:
break;
case EAlarmChangeEventTimerExpired:
break;
//.... Check other states is needed
default:
break;
};
TASShdAlarm allarm;
if(iASCliSession.GetAlarmDetails(iAlarmId,allarm) == KErrNone)
{
// allarm.Status()
// allarm.State()
// allarm.NextDueTime()
// ...
}
StartMonitoring();
}
void CCalAlarmObserver::DoCancel()
{
iASCliSession.NotifyChangeCancel();
}
[edit] 后记
当你开始监测后,每个事件都会调用RunL函数,其中iStatus为可能的错误代码。但这里iStatus为非负数,表示事件状态。
这里的闹铃ID存储的是闹铃id变量,当调用NotifyChange时将会给闹铃服务。使用这个ID我们可以获得闹铃的详细信息。