0

我正在学习 AIR 应用程序的自动更新功能。我创建了不起作用的简单应用程序。代码如下:

自动更新.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx" 
                   creationComplete="checkForUpdate()" >
<fx:Script><![CDATA[
    import air.update.ApplicationUpdaterUI;
    import air.update.events.UpdateEvent;

    private var appUpdater:ApplicationUpdaterUI=new ApplicationUpdaterUI();

    private function checkForUpdate():void
    {
        setApplicationVersion(); 
        appUpdater.delay = 1;
        appUpdater.isDownloadProgressVisible = true;
        appUpdater.isDownloadUpdateVisible = true

        appUpdater.isInstallUpdateVisible = true;
        appUpdater.isFileUpdateVisible = true;

        appUpdater.updateURL = "http://localhost:8081/DynamicWeb/release/update.xml";           
        appUpdater.isCheckForUpdateVisible = false; 
        appUpdater.addEventListener(UpdateEvent.INITIALIZED, onUpdate);
        appUpdater.addEventListener(ErrorEvent.ERROR, onError);
        appUpdater.initialize();
                   } 
    }

    // Find the current version for our Label below
    private function setApplicationVersion():void
    {
        var appXML:XML = NativeApplication.nativeApplication.applicationDescriptor;
        var ns:Namespace = appXML.namespace();
        lbl.text = "Current version is " + appXML.ns::version;
        //Common.helpDetails = appXML.ns::versionLabel;

    }

    private function onError(event:ErrorEvent):void
    {
        //Alert.show(event.toString());
    }

    private function onUpdate(event:UpdateEvent):void
    {
        appUpdater.checkNow(); // Go check for an update now         } 
    }

]]></fx:Script>


<s:HGroup x="89" y="124" width="413" height="34">
    <s:Label id="lbl" />
</s:HGroup>

</s:WindowedApplication>

*最初在 AutoUpdate-app.xml 和 update.xml 文件中的版本标签设置为 1.0.0

* 服务器端 update.xml 文件是:

<?xml version="1.0" encoding="UTF-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
<version>1.0.0</version>
<url>http://localhost:8081/DynamicWeb/release/Update_air.air</url>
<description><![CDATA[
 Typically, this is used to summarize what's new in the release
 ]]></description>
</update>

  • 现在我已经导出应用程序并安装了它。之后,我将文件 AutoUpdate-app.mxml 和 update.xml(server side) 的版本更改为 2.0.0 。现在我导出了应用程序并将其转储到服务器(在 update.xml 所在的“发布”文件夹中。)。现在当我启动应用程序时,更新功能不起作用。它什么也没发生。CheckNow() 方法被调用但什么也不做。请帮我。

我正在研究 AIR 3.1
它没有给出任何错误。只有更新窗口不起作用。请告诉我我做错了什么。谢谢。

4

2 回答 2

0

在您的服务器端 update.xml 中,您应该将标签版本替换为versionNumber。自 AIR 2.5 以来,这种情况发生了变化。

于 2013-05-28T06:30:19.387 回答
0

1)跟踪真实版本并从 update.xml 并确保你做对了。您必须确保使用 1.0.0 版本运行旧应用程序。顺便说一句,您可以使用属性ApplicationUpdaterUI.currentVersion而不是NativeApplication.nativeApplication.applicationDescriptor

2)您在 checkNow() 调用后不监听事件。听所有的事件,就像在这篇文章中一样。在

http://thanksmister.com/2009/09/13/custom-air-updater-interface-using-applicationupdater/(参见UpdateManager.as#initialize()):

appUpdater.addEventListener(UpdateEvent.INITIALIZED, updaterEvent);
appUpdater.addEventListener(StatusUpdateEvent.UPDATE_STATUS, updaterEvent);
appUpdater.addEventListener(UpdateEvent.BEFORE_INSTALL, updaterEvent);
appUpdater.addEventListener(StatusUpdateErrorEvent.UPDATE_ERROR, updaterEvent);
appUpdater.addEventListener(UpdateEvent.DOWNLOAD_START, updaterEvent);
appUpdater.addEventListener(ProgressEvent.PROGRESS, updaterEvent);
appUpdater.addEventListener(UpdateEvent.DOWNLOAD_COMPLETE, updaterEvent);
appUpdater.addEventListener(DownloadErrorEvent.DOWNLOAD_ERROR, updaterEvent);
appUpdater.addEventListener(ErrorEvent.ERROR, updaterEvent);

private function updaterEvent(event : Event) : void {
    trace(event.type);
}

可能,你错过了一些东西......

于 2012-09-01T12:54:42.443 回答