[转] [Flash/Flex] Flex框架下的RIA开发现场--第3回 Adobe AIR 2的15项新功能

Adobe AIR 2 引入了多项新特性,包括增强的 Web 渲染引擎 WebKit,支持 HTML5 和 CSS3,提高了 JavaScript 的处理速度,并引入了全局错误处理功能。此外,还增强了系统原生功能,支持原生安装程序和进程 API,改进了文件处理能力,增加了对大容量存储设备和打印机的操作支持,实现了从本地麦克风获取音频数据等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[url]http://bbs.9ria.com/thread-75934-1-1.html[/url]

第3回
改变了桌面应用程序的Adobe AIR 2的15项新功能


Adobe AIR 2、以及Flex 4.1/Flash Builder 4.0.1

Adobe AIR(以下简称AIR)是一个在Windows、Mac OS X、Linux乃至Android系统上跨平台运行的应用程序的运行时环境。 AIR包含了能够构建基于Flash和基于Ajax的应用程序的SDK。运用Flex开发,通过Flash Player能使用从Web浏览器端到独立应用程序的众多对象,更进一步地增加了可实现的功能。

□ AIR 2的新功能介绍

Flash Player 10.1增加了许多功能,使我们能开发出形式多样的应用程序。本文将按照以下主题来介绍一下AIR2.0的主要的新功能。

・Web渲染引擎WebKit的增强
    【1】HTML5/CSS3的支持
    【2】JavaScript处理高速化
  ・【3】全局错误处理
・系统原生功能的增强使用
    【4】原生安装程序
    【5】原生进程API
    【6】原生文件处理
    【7】拖拽远程文件实现文件拷贝
・デバイス連携が強化
    【8】大容量存储设备操作
    【9】打印机操作
    【10】从本地麦克风获取WAVE音频数据
    【11】多点触控与触摸手势
・网络功能增强
    【12】UDP Socket
    【13】TLS/SSL的支持
    【14】TCP服务端Socket的支持
    【15】DNS客户端
  在众多的新功能中,选取了第12点使用UDP广播为例开发简单通讯软件。

□ Flash Builder 4的Eclipse Plugin版和独立安装版
Flash Builder 4的Eclipse Plugin版,不能升级,必须先卸载旧版本再安装新版本。
Flash Builder 4的独立安装版,可以升级。  


Web渲染引擎WebKit的增强

□【1】HTML5/CSS3的支持
苹果公司的Safari浏览器(4.0.3版)与WebKit(531.9版)渲染引擎捆绑在了一起。因此,加入了HTML5/CSS3的支持。
使用HTML5开发桌面和iPad的公用库,在PC上利用AIR包装便可无需关心运行环境地进行部署。

□ 【2】JavaScript处理高速化
JavaScript代码的运行速度因SquirrelFish Extreme引擎的升级获得50%的提速。


[img]http://dl.iteye.com/upload/attachment/447466/e55a8fe9-4b51-3112-b3c2-730fa0f2e219.jpg[/img]


【3】全局错误处理

获益于全局错误处理功能,在发生未捕获的错误时也能捕捉到它。由此,在发生预期不到的错误时,就能实现显示警告或输出日志等处理了。
该功能也在Flash Player 10.1中获得支持。 
对于WindowedApplication(下例中的app)的实例,由于能够获得applicationComplete事件中的loaderInfo信息,在这时就能捕捉到UncaughtErrorEvent的UNCAUGHT_ERROR事件了。

app.addEventListener(FlexEvent.APPLICATION_COMPLETE, applicationCompleteHandler);

private function applicationCompleteHandler(event:FlexEvent):void
{
WindowedApplication(event.target).loaderInfo.uncaughtErrorEvents
.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, unCaughtErrorHandler);
}

private function unCaughtErrorHandler(event:UncaughtErrorEvent):void
{
Alert.show(event.toString(), "Error");
}


系统原生功能的增强使用

□【4】原生安装程序
每个系统都能生成自己的文件安装程序。例如Windows的.exe,Max OS的.dmg以及Linux的.rpm/.deb文件。AIR的运行时环境能根据需要自动安装程序,使我们不必关心运行时的部署问题。
另外,与使用.air文件安装有所不同,增强了在使用原生进程和原生安装文件进行安装的功能。

□ 【5】原生进程API
原生进程API能够启动外部应用程序及进行相应标准输入输出操作。它能连协Windows的Windows Script Hosting、Mac OS X的appleScript,乃至其他能通过命令行启动的应用程序。要使用原生进程API,必须通过原生安装程序来安装。 在NativeProcessStartupInfo类中设置好要启动的应用程序,将它传给NativePross的start方法就能开始运行了。在ProgressEvent、IOErrorEvent的各个事件中,能实现标准输入输出错误处理。 应用程序的退出也能通过NativeProcessExitEvent的EXIT方法获知,因此也可以反映出外部应用程序的运行结果。

□ 【6】原生文件处理
能够打开与应用程序关联的文件。即模拟在Windows等系统中双击打开文件的操作。
  调用File类中新增的openWithDefaultApplication方法。在非原生安装程序(即以.air文件)安装的情况下,有些文件类型有运行限制。

□ 【7】拖拽远程文件实现文件拷贝
通过将远程资源文件的URL传递到系统剪贴板,将文件从AIR应用程序中拖拽到桌面等本地文件夹,从而实现简单的文件下载功能。拖拽功能中,使用到了air.desktop包中新增的URLFilePromise方法。
private function fileLabel_mouseDown(event:MouseEvent):void
{
var clipboard:Clipboard = new Clipboard();
if (clipboard.supportsFilePromise)
{
var filePromise:URLFilePromise = new URLFilePromise();
filePromise.request = new URLRequest(http://www.tilfin.com/example.swc);
filePromise.relativePath = "example.swc";

var fileList:Array = new Array(filePromise);
clipboard.setData(ClipboardFormats.FILE_PROMISE_LIST_FORMAT, fileList);
NativeDragManager.doDrag(InteractiveObject(event.target), clipboard);
}
}
该功能因各个系统的支持不同,需要确认Clipboard的supportsFilePromise属性。

□ 【8】大容量存储设备的操作
能够对USB存储卡和闪存盘等外部连接设备进行文件系统操作,并能识别连入和拔出状态。
使用flash.filesystem包中新增的StorageVolumeInfo类(StorageVolumeInfo属性提供单例)。
通过StorageVolumeChangeEvent的STORAGE_VOLUME_MOUNT和STORAGE_VOLUME_UNMOUNT两个事件能识别设备的连入和拔出状态。由StorageVolume对象提供各个设备的信息。

□ 【9】打印机操作
能够分门别类地设置打印相关的各种细节。如PaperSize类设置纸张尺寸,PrintUIOption类设置打印区域,PrintMethod类设置打印形式(Bitmap或Vector形式)。这些新增的类都包含在了flash.pringing包中。

□ 【10】从本地麦克风获取WAVE音频数据
能够实现从连接电脑的麦克风中获取WAVE音频输入,进而进行音效处理、显示均衡器、音谱等非常广泛的功能。 在Microphone类中添加SampleDataEvent的SAMPLE_DATA事件,就能使用event.data.readFloat()方法捕捉到该时点的Sample值。

□ 【11】多点触控与触摸手势
能够在Windows7上处理多点触控,在Windows7和Mac OS X 10.5.3上处理触摸手势。 在Multitouch类中,能够确认运行环境中输入设备的支持状态。在TouchEvent、GestureEvent、PressAndTapGestureEvent、TransformGestureEvent这些事件中,能捕捉到用户的输入。


网络功能增强

□ 【12】UDP Socket
socket一直以来只能通过TCP实现客户端,而这次得到了大幅扩充。通过DatagramSocket类,能使用UDP进行单播、广播(能收能发)和多播(只发不收)。(详情请看下文中的例子)

□ 【13】TLS/SSL的支持
在SecureSocket类中,可与支持TLS/SSL并有可靠有效证书的服务器进行连接和密文通信。

□ 【14】TCP服务端Socket的支持
与UDP相同,TCP也能通过ServerSocket类实现服务端。这是“服务端开发可以用ActionScript来实现”的极其重大的升级。构建成为一个覆盖了从含有SQLite的AIR到服务端逻辑和数据库的基盘。
补充 通过ServerSocket实现了HTTP服务器的“airhttpd”
或许有些自卖自夸,公布了使用ServerSocket实现的HTTP服务器库“airhttpd”。可以参考例子中的Web应用程序。

airhttpd - Project Hosting on Google Code via kwout

[img]http://dl.iteye.com/upload/attachment/447468/5336f417-6ad7-3eb0-ad73-bf625ce978cd.jpg[/img]


□ 【15】DNS客户端
使用新的flash.net.dns包中的DNSResolver类,能实现DNS域名解析。
ARecord:主机的IPv4地址
AAAARecord:主机的IPv6地址
MXRecord:主机的邮件交换记录
PTRRecord:IP地址的主机名
SRVRecord:服务的服务记录


实际练习做一下AIR2的通讯程序
从这里开始,在众多新功能中,我们选择通过使用UDP的广播功能来尝试开发一个简单的通讯程序。开发环境为Flash Builder 4.0.1,SDK是Flex 4.1 + AIR 2.0.2。

[img]http://dl.iteye.com/upload/attachment/447470/1d610907-1c86-3c92-8efc-551162f1376f.gif[/img]


图 样例程序的截屏
□ 选出网络接口

接收数据的服务端实现。服务器为检测收到的数据包,需要监视特定的端口或地址。在此由于使用广播发送消息,将监视特定的网络。因此,首先选出对象网络。
通过networkInfo属性能够取得NetworkInfo类的单例。而在findInterfaces方法中,能通过NetworkInterface对象列表取得电脑拥有的所有网络接口。
通过address属性的InterfaceAddress对象列表能够取得NetworkInterface的地址信息。在此,我们从中选出在IPv4中具有广播地址的数据。
public static function getInterfaceAddressesForBind():Array
{
var addresses:Array = new Array();
var netinfo:NetworkInfo = NetworkInfo.networkInfo;
var netifs:Vector.<NetworkInterface> = netinfo.findInterfaces();

for each (var netif:NetworkInterface in netifs) {
for each (var addr:InterfaceAddress in netif.addresses) {
if (addr.ipVersion == IPVersion.IPV4 && addr.broadcast) {
addresses.push(addr);
}
}
}

return addresses;
}

□ 服务端处理和收发数据
接收数据的实现是通过将端口、IP地址传递给bind方法,再调用receive方法。在收到数据时会触发DatagramSocketDataEvent.DATA事件,下例中在socket_dataReceived中改变字符串。
发送数据的实现是对于相同的数据包,在send方法中设定发送数据、对象、长度、目标地址、目标端口并调用。在下例中,为了便于理解广播数据,将其定义在了Byte中。

_socket = new DatagramSocket();
_socket.addEventListener(DatagramSocketDataEvent.DATA, socket_dataReceived);
_socket.bind(_port, "192.168.1.223");
_socket.receive(); …【略】

private function socket_dataReceived(event: DatagramSocketDataEvent):void {
String msg = event.data.readUTFBytes(event.data.bytesAvailable);

}

public function sendMessage(msg:String):void {
var data:ByteArray = new ByteArray();
data.writeUTFBytes(msg);
_socket.send(data, 0, 0, "192.168.1.255", _port);
}

具体处理请查看代码。 MessePeer.zip (7.76 KB)


在Flex/AIR上也能开发Android/移动应用程序!

在新功能众多的AIR2中,已能实现绝大多数的桌面应用程序了。更进一步的使用,则是准备好包装了应用程序的各个系统的脚本,从原生进程进行操作等高级应用。
Android用的AIR(Adobe AIR for Android)已经发布了beta版。使用Flex开发面向移动终端的应用程序,将在支持多屏的下一个版本(开发代号:Hero)中获得实现。那就借这个机会接触一下Flex/AIR怎么样?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值