在任务列表中隐藏程序所引起的问题:无法关闭.
通过下面的代码在任务列表中隐藏程序:
Ui::ConstructL()
{
...
RWsSession& ws = iEikonEnv->WsSession();
TInt wgid = ws.GetFocusWindowGroup();
CApaWindowGroupName* gn = CApaWindowGroupName::NewLC(ws, wgid);
TUid aCurAppUid = gn->AppUid();
TInt activeId = aCurAppUid.iUid;
CleanupStack::PopAndDestroy(gn);
}
Document::UpdateTaskNameL(CApaWindowGroupName* aWgName)
{
aWgName->SetHidden(ETrue);
}
虽然起作用了,但是又引起新问题了,程序不能被强制关闭.
查找原因,关闭的时候,程序通过相应:
void AppUi::HandleCommandL( TInt aCommand )
{
case EEikCmdExit:
...
}
在任务栏隐藏后,就不相应HandleCommandL的EEikCmdExit命令了,从而不能正常关闭.
请问各位,怎么才能让程序能够相应EEikCmdExit命令,被正常关闭呢.
[解决办法]
在
void AppUi::HandleCommandL( TInt aCommand )
{
case EEikCmdExit:
...
}
方法中trace一下,当你程序隐藏后,按下关闭健,能否调到该函数。若能,看一下这种情况下的
aCommand值是什么,然后总结一下,看看是否有规律可以调用Exit()退出程序~
[解决办法]
执行AppUi::Exit();能退出吗?
[解决办法]
你别的程序是如何来关闭它的
[解决办法]
看你的描述,应该是能进
void AppUi::HandleCommandL( TInt aCommand )
{
case EEikCmdExit:
...
} 方法,
只是这时aCommand值不是EEikCmdExit罢了
是这样理解吗?这样就好办了!
调用Exit()退出就好~
[解决办法]
Document::UpdateTaskNameL(CApaWindowGroupName *aWgName) { CAknDocument::UpdateTaskNameL(aWgName); aWgName->SetHidden(ETrue); }
[解决办法]
in HandlecommandL of view
default:
{
AppUi()->HandleCommandL( aCommand );
break;
}
[解决办法]
没明白我的意思~
1. 你的情况是其他程序关闭你正在运行的程序,可以进入void AppUi::HandleCommandL( TInt aCommand )这个方法,只是不是EEikCmdExit事件? 还是这种情况下,根本就不能进入HandleCommandL方法?
2. 假如是第一种情况,那就在HandleCommandL内强制调用Exit()就行;
3. 假如是第二种情况,别的程序调用什么方式来终止你运行的程序的?能保证该方法确实会调用正在运行程序的HandleCommandL()方法吗?
4. 用RProcess来杀,应该可以杀掉吧
[解决办法]
void XXXUi::HandleCommandL(TInt aCommand)
{
switch (aCommand)
{
case EHidden:
{//隐藏程序
ActivateLocalViewL(KViewId);
TApaTask task(iCoeEnv->WsSession());
task.SetWgId(iCoeEnv->RootWin().Identifier());
task.SendToBackground();
break;
}
case EEikCmdExit:
Exit();//退出程序
break;
....................
}
}
[解决办法]
你的逻辑很奇怪啊,既然都隐藏了,用户怎么个关闭它法呢?长按Menu根本不出现在任务列表中!
值得注意的是:长按Menu然后按C键,会调用一次Appui::HandleCommand(),如果你在里面不响应退出,下一次按C键则不会继续调用HandleCommand了
[解决办法]
试验了一下没出现你说的问题, 重装的时候可以正常关闭,可能是别的地方造成的
测试手机E61和N95