擁有自動下載更新,對於一款正式發佈的軟件來說是一種不錯的功能!
實現的思路一般是在源程序資源文件中記錄本程序的版本號,更新時首先連接一服務器地址收到當前版本信息,如果高於當前版本,則將新版本下載更新。
對於Symbian 3rd下一般有兩種代碼方式更新安裝sisx文件,
一種RApaLsSession 類,這種方法代碼簡單但更新對用戶有提示不需要特別能力。
TBuf<64> buf;
buf.Append(KTempPath);//sisx文件路徑
RApaLsSession iApaLsSession;
iApaLsSession.Connect();
TThreadId threadId;
iApaLsSession.StartDocument( buf, threadId );
iApaLsSession.Close();
另外一種通過nokia sdk--plugin 包 SW_Installer_Launcher_API 實現
從名字上就可以看出它對用戶無提示安裝,但需要 TrustedUI 能力,發佈需要簽名
SDK_API_Plug-in
http://wiki.forum.nokia.com/index.php/SDK_API_Plug-in
實現可以參考
http://wiki.forum.nokia.com/index.php/SW_Installer_Launcher_API
但測試時注意,部分機型要將代碼中的EPolicyNotAllowed(E71)全改爲EPolicyAllowed(N95)才能實現
對於不提示卸載可以參考如下代碼
SwiUI::RSWInstLauncher swInstLauncher;
CleanupClosePushL(swInstLauncher);
User::LeaveIfError(swInstLauncher.Connect());
SwiUI::TUninstallOptions uninstallOptions;
uninstallOptions.iKillApp = SwiUI::EPolicyAllowed;
uninstallOptions.iBreakDependency = SwiUI::EPolicyAllowed;
SwiUI::TUninstallOptionsPckg optionsPckg(uninstallOptions);
swInstLauncher.SilentUninstall(TUid::Uid(xxxxxx), optionsPckg, SwiUI::KSisxMimeType);
CleanupStack::PopAndDestroy(&swInstLauncher);
iEikonEnv->InfoMsg( _L("SilentUninstall ok") );
這套Plugin API不但對於sisx文件可行,其他jar widget也行。只需修改KxxMimeType類型就行。(沒有實際測試過)
_LIT8(KMIMEType,"application/x-nokia-widget");
_LIT8( KSisxMimeType, "x-epoc/x-sisx-app" );
_LIT8( KSisMimeType, "application/vnd.symbian.install" );
_LIT8( KPipMimeType, "application/x-pip" );
_LIT8( KJadMIMEType, "text/vnd.sun.j2me.app-descriptor" );
_LIT8( KJarMIMEType, "application/java-archive" );
_LIT8( KJavaMIMEType, "application/java");
_LIT8( KJarxMIMEType, "application/x-java-archive");