×
Namespaces

Variants
Actions

如果取消自动启动?如何动态设置自动启动/自动重启

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
huwell 在 11 Aug 2007 创建
最后由 hamishwillee 在 15 Dec 2011 编辑
  • 开发伙伴平台:

S60 3rd Edition


  • 详细描述

目前在S60第三版上,如果程序想要做到自动启动,你就要使用启动列表管理API,详细信息可以参考S60 第三版SDK。

为了通过Symbian Signed认证,你需要在程序中提供一个函数来取消自动启动或自动重启。暂时还没有公开的API以解决此问题,不过这里提供两个解决方案:


1) 设计一个启动程序,它可以用来启动一个真正的应用程序,这个启动程序需要在手机启动时被自动启动,然后检查配置文件(.ini),如果配置文件中的启动标记设为ON,则开始

启动真正的应用程序,如果设置为OFF,则中断自己,不启动任何其他程序。

请注意,该启动程序在成功启动真正的应用程序后不应该被中断,否则,真正的应用程序将无法被成功启动,因为启动程序已经中断了。


2) 你也可以在手机启动时,设置真正的应用程序启动。一开始先检查配置文件,如果标记为ON,则继续启动它自己。如果标记为OFF,则它应该调用CAknAppUi::Exit(),中断自己。


和前个解决方案比较,这个方法无需面对两个程序需拥有一个安全ID的问题,但如果程序很大,它将消耗更多的CPU时间来加载程序,用户无法选择每次都启动程序。

第二个解决方案还有有几个问题:

如果程序能在菜单中自动或手动被启动,那将需要一个检查启动类型的机制。

我们可以采用如下方式: 当应用程序从启动列表中被启动时,程序注册文件中所有的启动参数都要阻止。

在注册文件的APP_REGISTRATION_INFO资源中添加'opaque_data'参数。

 #include <appinfo.rh>
 
#include <uikon.rh>
 
RESOURCE APP_REGISTRATION_INFO
 
{
 
...
 
opaque_data = r_startup_type;
 
}
 
RESOURCE NUMBER_INT8 r_startup_type
 
{
 
value = 1;
 
}


然后,重载AppUI中的ProcessCommandParametersL函数

TBool CMyAppUi::ProcessCommandParametersL( CApaCommandLine &aCommandLine )
 
{
 
if(aCommandLine.OpaqueData().Length() > 0)
 
{
 
// Opaque data exists, app. has been manually started from the menu
 
}
 
else
 
{
 
// App. has been auto-started -> exit if auto-start in settings is OFF
 
}
 
return CEikAppUi::ProcessCommandParametersL( aCommandLine );
 
}

另一个问题时,启动服务会监视所有的启动程序,如果程序在启动后5秒内中断,则会显示一个警告框给用户。为了防止这样警告出现,程序应该保持至少5秒再退出,可以在

ProcessCommandParametersL中设置一个timer,可以通过如下语句完成:

iEikonEnv->RootWin().SetOrdinalPosition(-1);


根据Nokia测试认证,第二个方法比第一个好,但完成情况要更加复杂。

This page was last modified on 15 December 2011, at 13:23.
39 page views in the last 30 days.
×