Inactivity()函数官方SDK的解释为
Requests an event if no activity occurs within the specified interval.
所以可以使用Inactivity()配合AO获取手机不活动的时间,实现某些特定功能
先看Start()函数的实现
void CActiveBall::Start(TTimeIntervalSeconds aTimeout)
{
Cancel();
iTimeout = aTimeout;
iInactivity = ETrue;
Inactivity(iTimeout);
}
void CActiveBall::Stop()
{
Cancel();
}
当然数据的初始化是必不可少的,下面一并贴出
// constructor
CActiveBall::CActiveBall(MObserver& aObserver)
:CTimer(EPriorityStandard), iObserver(aObserver)
{
// No implementation required
}
// EPOC default constructor can leave.
void CActiveBall::ConstructL()
{
//this is explicitly decareded in the CTimer document
CTimer::ConstructL();
// The following line is also essential!
CActiveScheduler::Add(this);
}
void CActiveBall::RunL()
{
if(iStatus!=KErrNone)
{
return;
}
if (iInactivity)
{
TTimeIntervalSeconds inactivity = User::InactivityTime().Int();
if (inactivity >= iTimeout)
{
iObserver.StartDisPlay(); //设置的获取到的手机不活动时间已到,调用某设置
if(!IsActive())
{
Inactivity(0);
iInactivity = EFalse;
}
}
else
{
Inactivity(iTimeout);
}
}
else
{
iObserver.CloseDisPlay(); //手机处于活动状态,调用某设置
if (!IsActive())
{
Inactivity(iTimeout);
iInactivity = ETrue;
}
}
if (!IsActive())
{
SetActive();
}
}
好了呵呵。
以上代码在3rd MR ,3rd fp1上测试可用