×
Namespaces

Variants
Actions

如何在S60第三版中通过程序启动MIDlets

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

文章
huwell 在 10 Jul 2007 创建
最后由 hamishwillee 在 15 Dec 2011 编辑
  • 设备, 软件 版本:

S60 3rd Edition, S60 3rd Edition FP1


描述

当安装一个MIDlet程序到S60第三版手机上时,将会被分配一个MIDlet-Suite UID和一个MIDlet-specific UID,这两个都是在安装时生成的。MIDlet的文件将被放置在

\private\102033E6\MIDlets\[MIDlet Suite UID]

因为MIDlet文件被放置在私有目录中,因此无法直接访问他们。为MIDlet生成的入口在已安装程序列表中还是有的。这个列表是由application architecture server来管理的,可以通过

RApaLsSession类的方法来读取。

列表中每个MIDlet入口在应用程序执行名称中都有一个".fakeapp"后缀,这个信息可用以在扫描列表时区分MIDlet和其他程序,为了从代码中启动MIDlet程序,其MIDlet-specific UID要被使用。


解决方案

下列示例代码演示了如何搜索所有安装的MIDlet程序:

//------------------------------------------------------------------------------
 
TApaAppInfo appInfo;
 
RApaLsSession apaSession;
 
User::LeaveIfError( apaSession.Connect() );
 
CleanupClosePushL( apaSession );
 
User::LeaveIfError( apaSession.GetAllApps() );
 
 
 
while ( apaSession.GetNextApp( appInfo ) == KErrNone )
 
{
 
if(appInfo.iFullName.Right(8).Compare(_L(".fakeapp") == 0)
 
{
 
// Caption of the MIDlet can be read from appInfo.iCaption
 
// When the MIDlet to be launch is found, store its UID
 
// (appInfo.iUid) for later use.
 
}
 
}
 
 
 
CleanupStack::PopAndDestroy(); // close apaSession
 
//------------------------------------------------------------------------------


启动MIDlet

当MIDlet程序的UID被获知后,就可以通过如下语句来启动:

TThreadId threadId;
apaSession.StartDocument(_L(""), iMidletUID, threadId);

一个空的描述符将被作为第一个参数传入(文件名称)。

如果启动程序期望监测该MIDlet程序,以便在其关闭时收到一个通知,则可以从CActive派生,并调用RThread::Logon():

TInt ret = iLaunchThread.Open(threadId); // iLaunchThread is of type RThread
 
if(ret == KErrNone)
 
{
 
iLaunchThread.Logon(iStatus);
 
SetActive();
 
}


如何在手机启动时加载MIDlet程序

S60并不提供任何进制在设备启动时加载MIDlet,但我们可以用如上方法写一个迷你小程序,并将它放在手机启动列表中,以便手机一启动就加载到某个MIDlet程序。

注意这里在启动列表中出现的程序需要有一个合法签名认证。

要获得更多信息,可以参考SDK帮助中的Startup List Management API部分。

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