您的位置:首页 > 运维架构

如何检测手机当前为“桌面”(desktop)状态

2009-12-30 11:25 260 查看
#ifdef __SERIES60_3X__
const TUid KUidStandBy = { 0x101fd64c }; // For 3rd Edition
const TUid KUidStandBy_FP2 = { 0x102750F0 }; // For 3rd edition Emulator and FP2 devices
#else // #ifdef __SERIES60_3X__
const TUid KUidStandBy = { 0x100058b3 }; // For 2nd Edition
#endif // #ifdef __SERIES60_3X__

From Forum Nokia Wiki

介绍

一些桌面软件会在用户把手机切换到桌面(desktop)时显示一些特定的信息,如图片,滚动文字等,达到一种个性桌面的效果,这里就介绍一种检测“桌面”的方法。

S60 2nd的“桌面”是电话应用,S60 3rd的“桌面”是Idle.exe,由此我们可以通过当前焦点程序的UID来判断手机是否处在“桌面”状态。

用户在操作手机时候会产生一些事件,其中有一个就是Focus Changed Event,所以我们只需获取这个事件通知,并在这个事件到来时获取焦点程序的UID进行比较就可以了。

平台

S60 2nd,3rd

1、使自己的程序接收Focus Changed Event:

void YourAppUi::ConstructL(void)
{
// some code

iEikonEnv->RootWin().EnableFocusChangeEvents();

// some code
}

2、处理事件:

void CDrawWindowTestAppUi::HandleWsEventL(const TWsEvent& aEvent,CCoeControl* aDestination)
{
// const TUid KUidPhoneApp = { 0x100058b3 };  // for S60 2nd
const TUid KUidIdleApp = { 0x101FD64C };      // for S60 3rd

if ( aEvent.Type() == EEventFocusGroupChanged )
{
// 获取当前焦点程序的UID
RWsSession& ws = iEikonEnv->WsSession();
TInt wgid = ws.GetFocusWindowGroup();
CApaWindowGroupName* gn = CApaWindowGroupName::NewLC(ws, wgid);
TUid aCurAppUid = gn->AppUid();
CleanupStack::PopAndDestroy(gn);

if ( aCurAppUid == KUidPhoneApp )
{
// 当前为桌面
}
else
{

}
}

// 不要忘了这里^_^
CAknAppUi::HandleWsEventL(aEvent, aDestination);

}

from : Cxt_programmer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: