破晓 发表于 2015-6-10 09:51:49

AIR自动更新工具类

package com.
{
import flash.events.ErrorEvent;
import flash.utils.getQualifiedClassName;

import mx.controls.Alert;

import air.update.ApplicationUpdaterUI;
import air.update.events.DownloadErrorEvent;
import air.update.events.StatusFileUpdateErrorEvent;
import air.update.events.StatusUpdateErrorEvent;
import air.update.events.UpdateEvent;

/**
   * 概要:软件更新管理器
   * 创建日期:2014-3-10
   * 最后更新日期:2014-3-10
   * @author
   */
public class AppUpdate
{
   
    private const downErrorMSG:Object =
      {
      "16800":"验证已下载的更新文件时出错。下面内容可能包含其他信息。",
      "16801":"Adobe AIR 文件无效(缺少 application.xml)。",
      "16802":"Adobe AIR 文件无效(缺少 MIME 类型)。",
      "16807":"Adobe AIR 文件无效(格式)。",
      "16804":"Adobe AIR 文件无效(标志无效)。",
      "16805":"Adobe AIR 文件无效(压缩方式未知)。",
      "16806":"Adobe AIR 文件无效(文件名无效)。",
      "16807":"Adobe AIR 文件无效(已损坏)。",
      "16808":"配置文件不存在。",
      "16809":"未设置 updateURL 属性。",
      "16810":"保留。",
      "16811":"配置文件无效(配置版本未知)。",
      "16812":"配置文件无效(缺少 URL)。",
      "16813":"配置文件无效(延迟格式)。",
      "16814":"配置文件无效(defaultUI 值无效)。",
      "16815":"更新描述符无效(描述符版本未知)。",
      "16816":"更新描述符无效(缺少更新版本)。",
      "16817":"更新描述符无效(说明无效)。",
      "16818":"向磁盘保存数据时发生 I/O 错误。下面内容可能会提供更多信息。",
      "16819":"下载时发生安全错误。下面内容可能会提供更多信息。",
      "16820":"HTTP 状态代码无效。下面内容可能包含无效的状态代码。",
      "16821":"保留。",
      "16822":"下载时发生 I/O 错误。下面内容可能会提供更多信息。",
      "16823":"向磁盘保存数据时文件尾出错。下面内容可能会提供更多信息。",
      "16824":"更新描述符无效。下面内容可能会提供更多信息。",
      "16825":"更新文件包含应用程序 ID 不同的应用程序。",
      "16826":"更新文件不包含应用程序的更新版本。",
      "16827":"更新文件中包含的版本与更新描述符中的版本不匹配。",
      "16828":"无法更新应用程序,通常是因为应用程序正在 AIR Debug Launcher (ADL) 中运行。",
      "16829":"安装时缺少更新文件。"
      };
   
    public function AppUpdate(configURL:String)
    {
      updateProject(configURL);
      if(appUpdater.isFirstRun)
      {
      var vi:VersionInfo = new VersionInfo();
      vi.version = appUpdater.currentVersion;
      vi.open();
      }
    }
   
   
    public static var appUpdater: ApplicationUpdaterUI = new ApplicationUpdaterUI();
   
    private function updateProject(configURL:String) :void {
      // 应用配置文件
      
      configURL += "version.xml";
      
      try
      {
      appUpdater.updateURL = configURL;
      appUpdater.isCheckForUpdateVisible = false;
      appUpdater.addEventListener(UpdateEvent.INITIALIZED, onUpdate);
      appUpdater.addEventListener(ErrorEvent.ERROR, onError);
      appUpdater.addEventListener(StatusUpdateErrorEvent.UPDATE_ERROR, updateErrorHandler);
      appUpdater.addEventListener(DownloadErrorEvent.DOWNLOAD_ERROR, downErrorHandler);
      appUpdater.addEventListener(StatusFileUpdateErrorEvent.FILE_UPDATE_ERROR, fileUpdateErrorHandler);
      
      appUpdater.initialize();
      }
      catch (error: Error)
      {
      
      Alert.show("检测更新失败", "更新失败", 4);
      removeHandler();
      
      }
    }
   
    private function removeHandler():void
    {
      appUpdater.removeEventListener(UpdateEvent.INITIALIZED, onUpdate);
      appUpdater.removeEventListener(ErrorEvent.ERROR, onError);
      appUpdater.removeEventListener(StatusUpdateErrorEvent.UPDATE_ERROR, updateErrorHandler);
      appUpdater.removeEventListener(DownloadErrorEvent.DOWNLOAD_ERROR, downErrorHandler);
      appUpdater.removeEventListener(StatusFileUpdateErrorEvent.FILE_UPDATE_ERROR, fileUpdateErrorHandler);
    }
   
    // 自动更新
    public static function updateAirFromService() :void
    {
      try
      {
      appUpdater.checkNow();
      }
      catch (error: Error)
      {
      Alert.show("下载更新失败", "onUpdate error", 4);      
      }
    }
   
    // 执行更新
    private function onUpdate(event:UpdateEvent):void
    {
      updateAirFromService();
    }
   
    // 更新检查失败
    private function onError(event:ErrorEvent):void
    {
      Alert.show("更新失败", "onError", 4);
      removeHandler();      
    }
   
    protected function updateErrorHandler(event:StatusUpdateErrorEvent):void
    {
      
      Alert.show("更新失败", "updateError", 4);
      removeHandler();
      
    }
   
    protected function downErrorHandler(event:DownloadErrorEvent):void
    {
      var msg:String = downErrorMSG + "\n";
      if(downErrorMSG)
      msg += downErrorMSG;
      else
      msg += event.subErrorID;
      msg += "\n";
      msg += event.text;
      
      Alert.show("应用下载失败","下载失败", 4);
      removeHandler();
      
    }
   
    protected function fileUpdateErrorHandler(event:StatusFileUpdateErrorEvent):void
    {
   
      Alert.show("文件下载失败", "fileUpdateError", 4);
      removeHandler();
      
    }
}
}

AppUpdate.as




破晓 发表于 2015-6-10 11:48:21

<?xml version="1.0" encoding="UTF-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/2.5">
        <versionNumber>1.0.1</versionNumber>
        <url>http://192.168.1.200:8080/app/gle/GraphicsLibraryEditor.air</url>
        <description>这是最新版的应用程序</description>
</update>version.xml



页: [1]
查看完整版本: AIR自动更新工具类