本文面向可以使用 ActionScript 3 并且至少基本理解 TCP 套接字的开发人员。
中级
与运行基于浏览器的网络应用程序相比,运行 AIR 桌面应用程序最大的优势之一是在桌面上安装应用程序所带来的丰富功能。例如,AIR 应用程序可以创建通知,更改停放或系统栏图标,当然,还能访问文件系统。
AIR 1.0 提供一整套文件 API,它们使开发人员能从文件系统进行读写;移动、复制和删除文件;遍历目录;打开本机文件选取器对话框等等。AIR 1.1 为 File 类添加了 spaceAvailable 属性,使开发人员能决定给定卷上的可用空间。AIR 2 通过增加以下功能,进一步扩展了文件 API:
本文涵盖以下主题:
AIR 2 将函数 openWithDefaultApplication 添加到 File 类。为某个文件调用 openWithDefaultApplication 将打开操作系统为这个文件关联的任何应用程序,然后激活该应用程序。例如,如果文件实例指向一个 Microsoft Word 文档,调用 openWithDefaultApplication 将打开 Microsoft Word 并载入引用的文件;或者,为某个图像调用 openWithDefaultApplication 可能使用 Photoshop 或其他默认图像应用程序打开该图像。
使用 openWithDefaultApplication 函数之前,应注意以下警告:
openWithDefaultApplication 函数。如果从应用程序沙箱外运行的代码调用它,将引发一个安全错误。openWithDefaultApplication 函数在打开后不提供与已启动进程的任何通信方式。如果需要启动一个外部进程并随后与它通信,请参阅新的 AIR 2 中的 NativeProcess API。openWithDefaultApplication 函数启动可执行文件。为了保留 Adobe AIR 应用程序的平台独立性质,您必须将新增的 AIR 2 中的 NativeProcess API 与本机安装程序结合使用,从 AIR 启动可执行文件。openWithDefaultApplication,将引发一个运行时错误。如果应用程序允许这一情况,请务必在代码找出这个错误并妥善处理。openWithDefaultApplication,它将在默认文件资源管理器应用程序中打开(Finder、Windows 资源管理器、Nautilus 等)。以下代码说明如何在 Mac OS X 上打开一个 Keynote 演示文稿:
var presentation:File = File.documentsDirectory.resolvePath("Presentations/MAX_2009.key");
presentation.openWithDefaultApplication();
openWithDefaultApplication 既是平台独立的,也是用户独立的,因为它使用与引用的文件类型关联的任何应用程序打开文件。例如,对一个 MP3 文件调用 openWithDefaultApplication 可能在 Mac OS X 上打开 iTunes,在 Windows 上打开 Windows Media 或在 Linux 上打开 VLC。
AIR 2 还为 File 类添加了 downloaded 属性,它允许 AIR 应用程序指定是否通过网络下载文件。在某些操作系统上,如果将该属性设置为 true,用户在第一次尝试打开文件时会收到安全通知。例如,当用户打开一个通过 Mac OS X 上的 Safari 下载的文件时,操作系统会在实际打开此文件之前显示一个对话框,要求用户确认。将文件保存到通过网络(例如,FTP 客户端)下载的 AIR 应用程序时,最好将该属性设置为 true。
注意:通过 FileReference.download 方法下载的文件会自动标记为已下载。
downloaded 属性只适用于 Windows XP SP2 和更高版本(包括 Vista 和 Windows 7)以及 Mac OS 10.5 (Leopard) 和更高版本。Linux 目前还不支持该属性;因此,在 Linux 上运行的应用程序中设置该属性无效。
以下代码说明如何为一个从网络下载并保存在本地的文件将 downloaded 属性设置为 true:
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE,
function(e:Event):void
{
var air:File = File.userDirectory.resolvePath("Downloads/AdobeAIR.dmg");
var fs:FileStream = new FileStream();
fs.open(air, FileMode.WRITE);
fs.writeBytes(loader.data);
fs.close();
air.downloaded = true;
});
var req:URLRequest = new URLRequest("http://airdownload.adobe.com/air/mac/download/latest/AdobeAIR.dmg");
loader.load(req);
StorageVolumeInfo.storageVolumeInfo.addEventListener(StorageVolumeChangeEvent.STORAGE_VOLUME_MOUNT, onVolumeMount);
StorageVolumeInfo.storageVolumeInfo.addEventListener(StorageVolumeChangeEvent.STORAGE_VOLUME_UNMOUNT, onVolumeUnmount);
StorageVolumeChangeEvent 包含对刚安装的 StorageVolume 的引用(如果对卸下的卷触发 StorageVolumeChangeEvent,storageVolume 属性为 null)。StorageVolume 类提供包含存储卷信息的几个属性,如:
fileSystemTypeisRemovableisWritabledrivenamerootDirectory注意:drive 属性指 Windows 上的盘符,在 Mac 上为 null。name 属性指 Mac 和 Windows 上的卷名。
要获得安装的存储卷的相关信息,并不一定总要监听 StorageVolumeChangeEvent;StorageVolumeInfo 类上的 getStorageVolumes 函数可以返回安装的存储卷的矢量。以下代码说明如何获取所有已安装存储卷的列表:
var volumes:Vector. = StorageVolumeInfo.storageVolumeInfo.getStorageVolumes();
for each (var volume:StorageVolume in volumes)
{
trace(volume.name, volume.rootDirectory.nativePath);
}
图 1 中所示的 FileTile 是我编写的一个范例应用程序,它用于说明新增的 AIR 2 文件系统 API。它是一个用于浏览存储卷的实用程序,如显示为存储卷的 Flash 驱动器和数码相机。您可以从 Adobe 实验室安装 FileTile 或从 Google Code下载完整的源代码。
本文涵盖 AIR 2 中的所有新增文件功能。有关更多信息,请参阅:
Adobe AIR Forums |
More |
| 04/11/2012 | Surround sound 5.1 with Air 3.2 on desktop app? |
|---|---|
| 12/12/2011 | Live Streaming H.264 Video on iOS using AIR |
| 04/17/2012 | HTMLLoader - Google Maps? |
| 04/12/2012 | Tabindex in forms on mobile? |
Adobe AIR Blog |
More |