分类: C/C++
2009-08-05 10:07:13
S60 3rd Edition
RASCliSession提供了一个简单有效的方法可以用来检测闹铃服务事件。包括对闹铃的修改事件触发等。这里包括时钟和日历闹铃的处理。
这个代码片段需要ReadUserData, WriteUserData, ReadDeviceData和WriteDeviceData能力。这里光自签名是执行不了的需要开发者证书才行。
Contents[] |
需要下列能力和链接库:
CAPABILITY ReadUserData WriteUserData ReadDeviceData WriteDeviceData LIBRARY alarmclient.lib LIBRARY alarmshared.lib
#include#include class CCalAlarmObserver : public CActive { public: void ConstructL(); CCalAlarmObserver(); ~CCalAlarmObserver(); protected: void DoCancel(); void RunL(); private: void StartMonitoring(); private: MMyLogCallBack& iCallBack; RASCliSession iASCliSession; TAlarmId iAlarmId; };
#include#include 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(); }
当你开始监测后,每个事件都会调用RunL函数,其中iStatus为可能的错误代码。但这里iStatus为非负数,表示事件状态。
这里的闹铃ID存储的是闹铃id变量,当调用NotifyChange时将会给闹铃服务。使用这个ID我们可以获得闹铃的详细信息。