23.17.创建系统托盘图标

23.17.1.问题
我想让应用程序运行在后台,不需要主界面。
23.17.2.解决办法
在<mx:WindowedApplication>根标签和描述文件里设置应用程序的可见性为false,使用DockIcon和SystemTrayIcon类,添加自定义程序图标。
23.17.3.讨论
是可以创建没有主界面的应用程序,且运行在后台。这些应用程序出现在系统托盘或停靠栏里。Mac OS X 和Windows操作系统都支持应用程序图标,只是规定有些差别。因此AIR 针对不同操作系统提供图标显示类。DockIcon类是运行在Mac OS X系统下而SystemTrayIcon类是在Windows下。要检测哪一个图标被操作系统所支持,你可以使用NativeApplication 类的supportsDockIcon 和supportsSystemTrayIcon属性。

DockIcon 和SystemTrayIcon 类都是继承自flash.desktop.InteractiveIcon 抽象基类。

NativeApplication实例的icon属性是指向操作系统支持的应用程序图标类引用。你可以赋值图形给icon的bitmaps属性。Bitmaps数组里的元素都是BitmapData对象,其大小是操作系统所规定的大小。如果bitmaps属性为空,则Mac OS X下默认的图标会被使用而Windows系统下不会显示图标在系统托盘上。

除了可以添加自定义应用程序图标外,你还可以添加当用户点击图标时显示的本地的上下文菜单。在上下文菜单上,可以监听选择项和运行相应的命令。下面的例子将运行在系统托盘或停靠栏上,并提供一个命令用于关闭程序:
+展开
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical"
visible="falsewindowComplete="completeHandler();">

<mx:Script>
<![CDATA[
[Embed(source='assets/AIRApp_16.png')]
private var icon16:Class;
[Embed(source='assets/AIRApp_32.png')]
private var icon32:Class;
[Embed(source='assets/AIRApp_48.png')]
private var icon48:Class;
[Embed(source='assets/AIRApp_128.png')]
private var icon128:Class;
private function completeHandler():void {
var shellMenu:NativeMenu = createShellMenu();
var icon:InteractiveIcon = NativeApplication.nativeApplication.icon;
if ( NativeApplication.supportsDockIcon ) {
( icon as DockIcon ).menu = shellMenu;
}
else
{
( icon as SystemTrayIcon ).menu = shellMenu;
( icon as SystemTrayIcon ).tooltip = "My App" ;
}
var bitmaps:Array = [new icon16(), new icon32(), new icon48(), new icon128()];
icon.bitmaps = bitmaps;
}
private function createShellMenu():NativeMenu {
var menu:NativeMenu = new NativeMenu();
var quitCmd:NativeMenuItem = new NativeMenuItem( "Quit");
quitCmd.addEventListener(Event.SELECT,quitHandler );
menu.addItem( quitCmd );
return menu;
}
private function quitHandler( evt:Event ):void {
NativeApplication.nativeApplication.exit();
}

]]>
</mx:Script>
</mx:WindowedApplication>

当应用程序启动和初始化完成后,通过NativeApplication.supportsDockIcon属性检测当前操作系统,如果为true则表明是Mac OS X系统,NativeApplication的InteractiveIcon类型的icon属性是一个DockIcon对象。通过createShellMenu方法创建本地上下文菜单赋值给icon的menu 属性。当用户点击quit命令是调用quitHandler方法。

这里有一个很重要的属性,那就是<mx:WindowedApplication>根标签的visible属性被设置为false,这样隐藏了程序主窗口,使所有用户必须通过系统托盘图标来访问程序。在描述文件里也同样设置visible属性达到相同效果。下面是一个描述文件例子:
+展开
-XML
<application xmlns="http://ns.adobe.com/air/application/1.0">
<id>SystTrayApp</id>
<name>SystTrayApp</name>
<filename>SystTrayApp</filename>
<version>0.1</version>
<initialWindow>
<content>SystTrayApp.swf</content>
<systemChrome>none</systemChrome>
<transparent>true</transparent>
<visible>true</visible>
</initialWindow>
</application>

加支付宝好友偷能量挖...


评论(0)网络
阅读(108)喜欢(0)flash/flex/fcs/AIR