×
Namespaces

Variants
Actions

如何获得程序安装时的事件通知

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

文章
hoolee 在 02 Feb 2008 创建
最后由 hamishwillee 在 15 Dec 2011 编辑
  • 开发伙伴平台:

S60 2nd Edition, S60 2nd Edition FP1, FP2, and FP3

S60 3rd Edition, S60 3rd Edition FP1


  • 详细描述

应用程序可能需要对软件安装事件做出反应。比如这样的情况,一个程序要启动安装一个SIS,监测它的安装进程,并在成功安装后处理相关事务。


  • 解决方案

我们可以通过调用RApaLsSession API来安装一个SIS,在下列示例代码中,iApaSession和iFs为RApaLsSession和RFs的实例,假设下列代码属于一个派生自CActive的类:

        TThreadId threadId;          
 
User::LeaveIfError(iApaSession.StartDocument(instSource, threadId));
 
// logon to the midlet installer thread
 
// iInstThread is the SW installer thread (of type RThread)
 
User::LeaveIfError(iInstThread.Open(threadId));
 
iInstThread.Logon(iStatus);
 
SetActive();

在安装结束后,不管成功还是失败,RunL()方法(来从CActive)都要被调用,如果要检测安装是否成功,我们可以使用RApaLsSession::GetAppInfo():

       TApaAppInfo appInfo;
 
if (aApaSession.GetAppInfo(appInfo, KInstalledAppUid) == KErrNone)
 
{
 
// application was installed successfully
 
}

注意,安装程序列表不会立刻更新,过早的调用GetAppInfo()将会返回KErrNotFound错误,尽管程序已顺利安装了。要解决这个问题,在S60第二版上可以通过向数据文件(程序信息存储之地)发送改变通知来处理:

_LIT(KApplicationsDataFilePath, "C:\\System\\Data\\Applications.dat");
 
iFs.NotifyChange(ENotifyWrite, iStatus, KApplicationsDataFilePath);

S60第三版上的解决方案为:

S60第三版提供了Publish和Subscribe key,从而可以更加容易的监控安装状态,并且获得最近安装程序的UID

    #include <e32property.h>
 
#include <sacls.h>
 
TInt instStatus;
 
User::LeaveIfError( RProperty::Get( KUidSystemCategory, KSAUidSoftwareInstallKeyValue, instStatus ) );


要获得这些key的更改变化通知,可以使用RProperty中Attach()和Subscribe()方法。返回值将为下列两个枚举类型的宽字符标识:

     enum TInstOp
 
{
 
 
 
EInstOpNone = 0x00000000,
 
EInstOpInstall = 0x00000001,
 
EInstOpUninstall = 0x00000002,
 
EInstOpRestore = 0x00000004
 
 
 
};
 
 
 
enum TInstOpStatus
 
{
 
 
 
EInstOpStatusNone = 0x00000000,
 
EInstOpStatusSuccess = 0x00000100,
 
EInstOpStatusAborted = 0x00000200
 
 
 
};


最近安装或更新程序的UID可以通过如下方法获取:

    TInt appUid;
 
User::LeaveIfError(RProperty::Get(KUidSystemCategory, KUidSwiLatestInstallation, appUid));
This page was last modified on 15 December 2011, at 09:46.
31 page views in the last 30 days.