Symbian 自定义桌面图像的响应

来源:互联网 发布:入侵五角大楼的网络 编辑:程序博客网 时间:2024/04/19 20:17

最近研究了一下在待机界面上点击自己的图标和文字去响应对应的APP.
总结一下,为自己走过的路留个脚印吧,也许可以供有需要的人参考.也算是我为Open source一小点贡献吧.

直接进入主题了.
本想找一个类似于时间控件的Plugin,画到桌面上.没有找到解决方案.希望NOKIA能尽快推出解决方法.
这样只能在桌面上画自己的图标或者文字,整个需求的难点在于,如何捕获到图标文字的焦点.
没有找到对应的解决方案,只能用替代方法解决,响应特定的按键来调起APP.

所需要用的技术如下:
1.监控桌面
2.图像文字的绘制
3.按键监控//注在应用程序在后台的情况下监控
4.响应指定的APP

图像文字绘制比较简单,在这里就不谈了.
1.监控桌面
需要用到捕获焦点变化事件EEventFocusGroupChanged. EEventFocusGroupChanged.事件产生的必要条件:
a.焦点事件是打开的
b.有焦点发生变化
代码如下:
void *****AppUi::ConstructL()
 

   {
    BaseConstructL();
    iEikonEnv->RootWin().EnableFocusChangeEvents();//注这句是必须的(必要条件a)
    ...................
    }

void *****AppUi::HandleWsEventL()
   {
       const TUid KUidMenu = {  0x101f4cd2 }; // The UID of the Menu applciation//用于模拟器待机桌面
       const TUid KUidPhoneApp = { 0x100058b3 };  // for S60 2nd
       const TUid KUidIdleApp = { 0x101FD64C };   // for S60 3rd
       if ( aEvent.Type() == EEventFocusGroupChanged )
    {
       RWsSession& ws = iEikonEnv->WsSession();
       TInt wgid = ws.GetFocusWindowGroup();
       CApaWindowGroupName* gn = CApaWindowGroupName::NewLC(ws, wgid);
       TUid aCurAppUid = gn->AppUid();
       CleanupStack::PopAndDestroy(gn);

       if ( aCurAppUid == KUidPhoneApp )
       {
               //此时为桌面,绘制指定的图像,文字
           }
        }
   }

2.按键监控
  主要用到RWindowGroup的CaptureKey方法
  在NOKIA论坛里可以找到源码.搜索CKeyCapturer
4.响应指定的APP
  RApaLsSession appArcSession;
  ret = KErrNone;
  CleanupClosePushL(appArcSession);
  ret = appArcSession.Connect();
  CApaCommandLine* cmdline = CApaCommandLine::NewLC();
  TRAP(ret, cmdline->SetCommandL(EApaCommandRun));
  TRAP(ret, cmdline->SetExecutableNameL(****Name);//加载指定应用程序的名字
  ret = appArcSession.StartApp(*cmdline);//启动指定的APP
  CleanupStack::PopAndDestroy(2, &appArcSession);
到此,整个需求处理完成!!
原创粉丝点击