Iconos de la barra de tareas en AIR

Adobe AIR 1.0 y posterior

Muchos sistemas operativos incluyen una barra de tareas (en Mac OS X, por ejemplo, el Dock) que pueden contener iconos para representar aplicaciones. Adobe® AIR® proporciona una interfaz para interactuar con los iconos de la barra de tareas de la aplicación mediante la propiedad NativeApplication.nativeApplication.icon .

Iconos de la barra de tareas

AIR crea el objeto NativeApplication.nativeApplication.icon automáticamente. En función del sistema operativo, el tipo de objeto es DockIcon o SystemTrayIcon. Es posible determinar cuál de estas subclases InteractiveIcon admitidas por AIR en el sistema operativo actual mediante las propiedades NativeApplication.supportsDockIcon y NativeApplication.supportsSystemTrayIcon . La clase base InteractiveIcon incluye las propiedades width , height y bitmaps . Estas propiedades se pueden utilizar para cambiar la imagen utilizada para el icono. Ahora bien, si accede a propiedades específicas de DockIcon o de SystemTrayIcon en el sistema operativo incorrecto se producirá un error de tiempo de ejecución.

Para establecer o cambiar la imagen utilizada para un icono, cree un conjunto que contenga una o varias imágenes y asígnelo a la propiedad NativeApplication.nativeApplication.icon.bitmaps . El tamaño de los iconos de la barra de tareas puede variar según el sistema operativo. Para que la imagen no se deteriore por el cambio de tamaño, puede añadir varios tamaños de imágenes al conjunto bitmaps . Si incluye más de una imagen, AIR selecciona el tamaño que más se acerque al tamaño real del icono en la barra de tareas y lo cambia de tamaño únicamente si es necesario. El siguiente ejemplo establece la imagen de un icono de la barra de tareas a partir de dos imágenes:

NativeApplication.nativeApplication.icon.bitmaps =  
            [bmp16x16.bitmapData, bmp128x128.bitmapData]; 

Para cambiar la imagen del icono, asigne un conjunto con la nueva imagen o las nuevas imágenes a la propiedad bitmaps . Puede animar el icono haciendo que la imagen cambie en respuesta a un evento enterFrame o timer .

Para eliminar el icono del área de notificación de Windows y Linux o para restaurar el aspecto predeterminado del icono en Mac OS X, establezca bitmaps como un conjunto vacío:

NativeApplication.nativeApplication.icon.bitmaps = []; 

Iconos del Dock

AIR admite iconos del Dock si NativeApplication.supportsDockIcon es true . La propiedad NativeApplication.nativeApplication.icon representa el icono de la aplicación en el Dock (no el icono de la ventana).

Nota: con AIR no es posible cambiar los iconos de ventanas en el Dock en Mac OS X. Asimismo, los cambios realizados en el icono del Dock de la aplicación solo se aplican cuando la aplicación se está ejecutando (el icono recupera su aspecto normal cuando se cierra la aplicación).

Menús de iconos del Dock

Es posible añadir comandos al menú estándar del Dock. Basta con crear un objeto NativeMenu que contenga los comandos y asignarlo a la propiedad NativeApplication.nativeApplication.icon.menu . Las opciones del menú se visualizarán encima de las opciones estándar del menú del icono del Dock.

Efecto de rebote de los iconos del Dock

Puede hacer que el icono del Dock tenga efecto de rebote si llama al método NativeApplication.nativeApplication.icon.bounce() . Si establece el parámetro bounce() priority como informativo, el icono rebota una vez. Si se establece como crítico, el icono rebota hasta que el usuario activa la aplicación. Las constantes del parámetro priority se definen en la clase NotificationType.

Nota: el icono no tiene efecto de rebote si la aplicación ya está activa.

Eventos de iconos del Dock

Cuando se hace clic en un icono del Dock, el objeto NativeApplication distribuye un evento invoke . Si la aplicación no está en ejecución, el sistema la inicia. En caso contrario, se entrega el evento invoke a la instancia de la aplicación en ejecución.

Iconos de la bandeja del sistema

AIR admite iconos de bandeja del sistema si NativeApplication.supportsSystemTrayIcon es true (esto solo sucede en Windows y en la mayoría de distribuciones de Linux). En Windows y Linux, los iconos de la bandeja del sistema se visualizan en el área de notificación de la barra de tareas. De forma predeterminada, no aparece ningún icono. Para mostrar un icono, debe asignar un conjunto que contenga objetos BitmapData a la propiedad bitmaps del icono. Para cambiar la imagen del icono, asigne un conjunto con las nuevas imágenes a bitmaps . Para quitar el icono, establezca bitmaps como null .

Menús de los iconos de la bandeja del sistema

Es posible añadir un menú al icono de la bandeja del sistema. Basta con crear un objeto NativeMenu y asignarlo a la propiedad NativeApplication.nativeApplication.icon.menu (el sistema operativo no proporciona ningún menú predeterminado). Para acceder al menú del icono de la bandeja del sistema, haga clic con el botón derecho sobre el icono.

Sugerencias de los iconos de la bandeja del sistema

Puede añadir una sugerencia a un icono si establece la propiedad tooltip:

NativeApplication.nativeApplication.icon.tooltip = "Application name"; 

Eventos de iconos de la bandeja del sistema

El objeto SystemTrayIcon al que hace referencia la propiedad NativeApplication.nativeApplication.icon distribuye un evento ScreenMouseEvent en los eventos click , mouseDown , mouseUp , rightClick , rightMouseDown y rightMouseUp . Puede utilizar estos eventos, junto con el menú del icono, para permitir que los usuarios puedan interactuar con la aplicación cuando esta no tenga ninguna ventana visible.

Ejemplo: Creación de una aplicación sin ventanas

El siguiente ejemplo crea una aplicación de AIR con un icono de bandeja del sistema pero sin ventanas visibles. (La propiedad visible de la aplicación no se debe establecer en true en el descriptor de la aplicación o la ventana estará visible cuando se inicie la aplicación.)

package 
{ 
    import flash.display.Loader; 
    import flash.display.NativeMenu; 
    import flash.display.NativeMenuItem; 
    import flash.display.NativeWindow; 
    import flash.display.Sprite; 
    import flash.desktop.DockIcon; 
    import flash.desktop.SystemTrayIcon; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.desktop.NativeApplication; 
 
    public class SysTrayApp extends Sprite 
    { 
        public function SysTrayApp():void{ 
            NativeApplication.nativeApplication.autoExit = false; 
            var icon:Loader = new Loader(); 
            var iconMenu:NativeMenu = new NativeMenu(); 
            var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Exit")); 
                exitCommand.addEventListener(Event.SELECT, function(event:Event):void { 
                    NativeApplication.nativeApplication.icon.bitmaps = []; 
                    NativeApplication.nativeApplication.exit(); 
                }); 
 
            if (NativeApplication.supportsSystemTrayIcon) { 
                NativeApplication.nativeApplication.autoExit = false; 
                icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete); 
                icon.load(new URLRequest("icons/AIRApp_16.png")); 
                 
                var systray:SystemTrayIcon =  
                    NativeApplication.nativeApplication.icon as SystemTrayIcon; 
                systray.tooltip = "AIR application"; 
                systray.menu = iconMenu; 
            } 
 
            if (NativeApplication.supportsDockIcon){ 
                icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete); 
                icon.load(new URLRequest("icons/AIRApp_128.png")); 
                var dock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;  
                dock.menu = iconMenu; 
            } 
        } 
         
        private function iconLoadComplete(event:Event):void 
        { 
            NativeApplication.nativeApplication.icon.bitmaps = 
                [event.target.content.bitmapData]; 
        } 
    } 
} 
Nota: al utilizar el componente WindowedApplication de Flex, el atributo visible de la etiqueta WindowedApplication debe definirse como false . Este atributo sustituye a la configuración en el descriptor de la aplicación.
Nota: en el ejemplo se asume que existen dos archivos de imagen llamados AIRApp_16.png y AIRApp_128.png en un subdirectorio de la aplicación denominado icons . (El SDK de AIR contiene archivos de icono de ejemplos que puede copiar en su carpeta del proyecto.)

Botones e iconos de la barra de tareas de la ventana

Los iconos de las ventanas se suelen visualizar en un área de la ventana, denominada barra de tareas o Dock, para que los usuarios puedan acceder fácilmente a las ventanas en segundo plano o minimizadas. El Dock de Mac OS X muestra un icono de las aplicaciones así como uno para cada ventana minimizada. Las barras de tareas de Microsoft Windows y Linux muestran un botón con el icono del programa y el título de cada ventana de tipo normal de la aplicación.

Resaltar el botón de ventana de la barra de tareas

Si una ventana está en segundo plano, puede avisar al usuario de la existencia de un evento de interés relacionado con la ventana. En Mac OS X, puede avisar al usuario con un efecto de rebote del icono en el Dock (tal como se describe en la sección Efecto de rebote de los iconos del Dock ). En Windows y Linux, puede resaltar el botón de la barra de tareas de la ventana llamando al método notifyUser() de la instancia de NativeWindow. El parámetro type transferido al método determina la urgencia de la notificación:

  • NotificationType.CRITICAL : el icono de la ventana parpadea hasta que el usuario la pone en primer plano.

  • NotificationType.INFORMATIONAL : el icono de la ventana se resalta cambiando de color.

    Nota: en Linux, solo se admite el tipo informativo de notificación. La transmisión de cualquier valor de tipo a la función notifyUser() creará el mismo efecto.

    La siguiente sentencia resalta el botón de la barra de tareas de una ventana:

    stage.nativeWindow.notifyUser(NotificationType.CRITICAL); 

    Si llama al método NativeWindow.notifyUser() en un sistema operativo no compatible con avisos de nivel de ventana, no producirá ningún efecto. Utilice la propiedad NativeWindow.supportsNotification para determinar si es compatible con la notificación de ventanas.

Creación de ventanas sin botones ni iconos de barra de tareas

En el sistema operativo Windows, las ventanas creadas con los tipos utility o lightweight no aparecen en la barra de tareas. Las ventanas invisibles tampoco aparecen en la barra de tareas.

Dado que la ventana inicial siempre es de tipo normal para poder crear una aplicación sin ventanas en la barra de tareas, debe cerrar la ventana inicial o hacerla invisible. Para cerrar todas las ventanas de la aplicación sin salir del programa, establezca la propiedad autoExit del objeto NativeApplication como false antes de cerrar la última ventana. Si simplemente quiere evitar que la ventana principal sea visible, añada <visible>false</visible> al elemento <initalWindow> del archivo descriptor de la aplicación (y no establezca la propiedad visible como true ni llame al método activate() de la ventana).

En la ventanas nuevas abiertas por la aplicación, establezca la propiedad type del objeto NativeWindowInitOption transferido al constructor de la ventana como NativeWindowType.UTILITY o NativeWindowType.LIGHTWEIGHT .

En Mac OS X, las ventanas minimizadas se visualizan en el Dock. Si quiere evitar que el icono minimizado se visualice, oculte la ventana en vez de minimizarla. El siguiente ejemplo detecta un evento de cambio nativeWindowDisplayState y lo cancela y la ventana se está minimizando. En su lugar, el controlador establece la propiedad visible de la ventana como false :

private function preventMinimize(event:NativeWindowDisplayStateEvent):void{ 
    if(event.afterDisplayState == NativeWindowDisplayState.MINIMIZED){ 
        event.preventDefault(); 
        event.target.visible = false; 
    } 
} 

Si una ventana está minimizada en el Dock de Mac OS X al establecer la propiedad visible como false , el icono del Dock no desaparece. El usuario puede seguir haciendo clic en el icono para volver a mostrar la ventana.