一些桌面软件会在用户把手机切换到桌面(desktop)时显示一些特定的信息,如图片,滚动文字等,达到一种个性桌面的效果,这里就介绍一种检测“桌面”的方法。
S60 2nd的“桌面”是电话应用,S60
3rd的“桌面”是Idle.exe,由此我们可以通过当前焦点程序的UID来判断手机是否处在“桌面”状态。
用户在操作手机时候会产生一些事件,其中有一个就是Focus Changed
Event,所以我们只需获取这个事件通知,并在这个事件到来时获取焦点程序的UID进行比较就可以了。
平台
S60 2nd,3rd
1、使自己的程序接收Focus Changed Event:
void YourAppUi::ConstructL(void)
{
iEikonEnv->RootWin().EnableFocusChangeEvents();
// some code
}
void HandleWsEventL(const TWsEvent&
aEvent,CCoeControl* aDestination)
{
// const TUid KUidPhoneApp = {
0x100058b3 }; // for S60 2nd
const TUid KUidIdleApp = {
0x101FD64C }; // for S60 3rd
if ( aEvent.Type() ==
21)//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 )
{
//
当前为桌面
//程序1
}
else
{
//程序2
}
}
CAknAppUi::HandleWsEventL(aEvent,
aDestination);
}