处理 AIR 运行时和操作系统信息Adobe AIR 1.0 和更高版本 本部分讨论 AIR 应用程序如何管理操作系统文件关联,如何检测用户活动以及如何获取 Adobe® AIR® 运行时的有关信息。 管理文件关联必须在应用程序描述符中声明应用程序与文件类型之间的关联。在安装过程中,AIR 应用程序安装程序会将 AIR 应用程序关联为声明的各个文件类型的默认打开应用程序,但当文件类型已有与之关联的默认打开应用程序时除外。AIR 应用程序安装过程不会覆盖现有的文件类型关联。要接管与其他应用程序的关联,请在运行时调用 NativeApplication.setAsDefaultApplication() 方法。 在启动应用程序时验证所需的文件关联是否就绪是一种很好的做法。这是因为 AIR 应用程序安装程序不会覆盖现有的文件关联,并且用户系统上的文件关联随时都可能发生更改。如果文件类型当前已关联到其他应用程序,则在接管现有关联之前询问用户是否更改文件关联也是一种很有礼貌的做法。 应用程序可以通过 NativeApplication 类的以下方法管理文件关联。各个方法都将文件类型扩展名视为一个参数:
AIR 只能管理最初在应用程序描述符中声明的文件类型的关联。即使用户在文件类型与您的应用程序之间手动建立了关联,您也无法获取有关未声明文件类型的关联信息。使用未在应用程序描述符中声明的文件类型的扩展名调用任何文件关联管理方法,将导致应用程序引发运行时异常。 获取运行时版本和修补级别NativeApplication 对象包含一个 runtimeVersion 属性,该属性表示在其中运行应用程序的运行时的版本(一个字符串,例如"1.0.5")。NativeApplication 对象还包含一个 runtimePatchLevel 属性,该属性表示运行时的修补级别(一个数字,例如 2960)。以下代码使用了这些属性: trace(NativeApplication.nativeApplication.runtimeVersion); trace(NativeApplication.nativeApplication.runtimePatchLevel); 检测 AIR 功能对于与 Adobe AIR 应用程序捆绑的文件,Security.sandboxType 属性设置为由 Security.APPLICATION 常量定义的值。可以根据文件是否位于 Adobe AIR 安全沙箱中来加载内容(可以包含也可以不包含特定于 AIR 的 API),如以下代码所示: if (Security.sandboxType == Security.APPLICATION) { // Load SWF that contains AIR APIs } else { // Load SWF that does not contain AIR APIs } 对于未随 AIR 应用程序一起安装的所有资源,其所分配的安全沙箱与 Adobe® Flash® Player 在 Web 浏览器中为其分配的安全沙箱是相同的。远程资源根据其源域放在相应的沙箱中,本地资源放在只能与远程内容交互的沙箱、只能与本地文件系统内容交互的沙箱或受信任的本地沙箱中。 可以检查 Capabilities.playerType 静态属性是否设置为"Desktop",从而查看内容是否在运行时中执行(不是在浏览器中运行的 Flash Player 中运行)。 有关详细信息,请参阅 AIR 安全性。 跟踪用户当前状态NativeApplication 对象调度两个事件,可帮助检测用户是否正在使用计算机。如果在 NativeApplication.idleThreshold 属性指定的间隔内未检测到任何鼠标或键盘活动,则 NativeApplication 将调度 userIdle 事件。当发生下一次键盘或鼠标输入时,NativeApplication 对象将调度 userPresent 事件。idleThreshold 间隔以秒为单位,默认值为 300(5 分钟)。还可以通过 NativeApplication.nativeApplication.lastUserInput 属性获取自上一个用户输入以来经过的秒数。 以下代码行将空闲阈值设置为 2 分钟,并同时侦听 userIdle 和 userPresent 事件: NativeApplication.nativeApplication.idleThreshold = 120; NativeApplication.nativeApplication.addEventListener(Event.USER_IDLE, function(event:Event) { trace("Idle"); }); NativeApplication.nativeApplication.addEventListener(Event.USER_PRESENT, function(event:Event) { trace("Present"); }); 注: 在任意两个 userPresent 事件之间,只调度一个 userIdle 事件。
|
|