关于Adobe AIR跨平台的透明开发问题

电介质 发布于 2008年07月06日 星期日 5:26 下午 1 条评论 »

Adobe AIR程序可以跨平台运行的特性,是其优势之一,虽然目前只能在Mac、windows上,但linux环境也会很快被支持,已经在开发进程当中。

对于开发者来说,跨平台开发的代码透明是最理想的了,但是由于操作系统的管理方式的差异,要做到完全透明是不易的甚至有时是不可能的,今天看了Adobe 官方的一个例子,知道至少下面的一些问题是需要开发者去分别为不同平台去处理的。

对于Mac是Dock Icons(停靠图标),对于windows是System tray icons(系统托盘图标);对mac和windows都使用过人人,应该知道他们的区别。在Adobe AIR开发中就需要针对这两个的区别分别处理,例子代码如下:

if(NativeApplication.supportsDockIcon){
var dockIcon:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, undock);
dockIcon.menu = createIconMenu();
} else if (NativeApplication.supportsSystemTrayIcon){
var sysTrayIcon:SystemTrayIcon =
NativeApplication.nativeApplication.icon as SystemTrayIcon;
sysTrayIcon.tooltip = “Stopwatch”;
sysTrayIcon.addEventListener(MouseEvent.CLICK,undock);
sysTrayIcon.menu = createIconMenu();
}

这个例子代码通过在运行时判断是否支持Dock Icons和System tray icons,来分别用不同的代码段处理Adobe AIR应用程序的两个平台图标的显示、事件监听、和菜单创建。将NativeApplication.nativeApplication.icon 根据平台支持情况分别作为DockIcon和SystemTrayIcon,来分别处理调用,事件监听和菜单创建,在Windows下还有SystemTrayIcon的工具条提示信息的设置。

另外就是对于用户通知当前Adobe AIR应用程序有事件发生的处理,在Mac OS X,Dock Icon能被用来通知有事件发生,而windows下采用的是另外一套方案,可以通过改变system tray icon的图像,或弹出一个窗口消息。在窗口层面的的事件通知功能,是用一个当前应用程序窗口的任务栏按钮的闪动来实现,以吸引用户去点击按钮,查看窗口事件。因此对于此类消息事件通知的开发,同样需要两套不同的代码支持,例子代码如下:

if(NativeApplication.supportsDockIcon){
        var dock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;
        dock.bounce(NotificationType.CRITICAL);
    } else if (NativeApplication.supportsSystemTrayIcon){
        stage.nativeWindow.notifyUser(NotificationType.CRITICAL);
    }

这个例子代码根据操作系统的支持情况分别调用DockIcon.bounce()NativeWindow.notifyUser()两个函数来处理,提示通知。

对于将来的linux下的支持,我想linux下的支持方式应该是类似windows的SystemTrayIcon方式,不应该再出来另外一种情况的单独处理判断了吧。


此文 关于Adobe AIR跨平台的透明开发问题 首发在:魔力谷-flash风 作者:电介质

版权所有,欢迎转载,转载请注明作者和出处!

文章分类: AIR

Trackback地址: http://flash.moligu.com/24/trackback

对《关于Adobe AIR跨平台的透明开发问题》有 1 条评论

  1. 关于AIR的一些问题 :flash风=>来自魔力谷 ,

    [...] 对于开发者来说,跨平台开发的代码透明是最理想的了,但是由于操作系统的管理方式的差异,要做到完全透明是不易的甚至有时是不可能的,具体参看关于Adobe AIR跨平台的透明开发问题。 [...]

发表评论