Ícones da barra de tarefas no AIR

Adobe AIR 1.0 e posterior

Muitos sistemas operacionais têm uma barra de tarefas, como o encaixe do Mac OS X, que pode conter um ícone representando um aplicativo. O Adobe® AIR® oferece uma interface que permite interagir com o ícone na barra de tarefas através da propriedade NativeApplication.nativeApplication.icon .

Sobre ícones na barra de tarefas

O AIR cria o objeto NativeApplication.nativeApplication.icon automaticamente. O tipo de objeto é DockIcon ou SystemTrayIcon, dependendo do sistema operacional. É possível determinar qual destas subclasses InteractiveIcon é suportada pelo AIR no sistema operacional atual usando as propriedades NativeApplication.supportsDockIcon e NativeApplication.supportsSystemTrayIcon . A classe base InteractiveIcon oferece as propriedades width , height e bitmaps , que você pode usar para alterar a imagem utilizada para o ícone. No entanto, acessar propriedades específicas de DockIcon ou SystemTrayIcon no sistema operacional incorreto gera um erro de execução.

Para definir ou alterar a imagem usada para um ícone, crie uma matriz que contenha uma ou mais imagens e a atribua à propriedade NativeApplication.nativeApplication.icon.bitmaps . O tamanho dos ícones na barra de tarefas pode ser diferente nos diferentes sistemas operacionais. Para evitar a degradação da imagem devido ao dimensionamento, é possível adicionar vários tamanhos de imagem à matriz bitmaps . Se você fornecer mais de uma imagem, o AIR selecionará o tamanho mais próximo do tamanho de exibição atual do ícone na barra de tarefas e só o dimensionará se for necessário. O exemplo abaixo define a imagem para um ícone da barra de tarefas usando duas imagens:

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

Para alterar a imagem de um ícone, atribua uma matriz que contenha a(s) nova(s) imagem(ns) à propriedade bitmaps . Você pode animar o ícone alterando a imagem em resposta a um evento enterFrame ou timer .

Para remover o ícone da área de notificação no Windows e no Linux ou para restaurar a aparência do ícone padrão no Mac OS X, defina bitmaps como uma matriz vazia:

NativeApplication.nativeApplication.icon.bitmaps = []; 

Ícones de encaixe

O AIR suporta ícones de encaixe quando NativeApplication.supportsDockIcon é true . A propriedade NativeApplication.nativeApplication.icon representa o ícone do aplicativo no encaixe (não um ícone de encaixe na janela).

Nota: O AIR não permite alterar ícones de janela no encaixe do Mac OS X. Além disso, as alterações feitas no ícone de encaixe de aplicativo só são aplicadas enquanto um aplicativo está em execução — o ícone reassume a aparência normal quando o aplicativo é encerrado.

Menus com ícone no encaixe

É possível adicionar comandos ao menu de encaixe padrão criando um objeto NativeMenu que contenha os comandos e atribuindo o objeto à propriedade NativeApplication.nativeApplication.icon.menu . Os itens do menu são exibidos acima dos itens padrão do menu com ícones no encaixe.

Fazer o encaixe pular

É possível fazer com que o ícone no encaixe pule chamando o método NativeApplication.nativeApplication.icon.bounce() . Se você definir o parâmetro bounce() priority como informativo, o ícone pulará uma vez. Se você definir o parâmetro como crítico, o ícone pulará até o usuário ativar o aplicativo. As constantes do parâmetro priority são definidas na classe NotificationType.

Nota: O ícone não pula se o aplicativo já está ativo.

Eventos de ícones no encaixe

Quando o usuário clica em um ícone no encaixe, o objeto NativeApplication despacha um evento invoke . Se o aplicativo não estiver em execução, será iniciado pelo sistema. Caso contrário, o evento invoke será entregue à ocorrência do aplicativo em execução.

Ícones de bandeja do sistema

O AIR oferece suporte a ícones de bandeja do sistema quando NativeApplication.supportsSystemTrayIcon for true , o que no momento só ocorre no Windows e na maioria das distribuições do Linux. No Windows e no Linux, os ícones de bandeja do sistema são exibidos na área de notificação da barra de tarefas. Nenhum ícone é exibido por padrão. Para mostrar um ícone, atribua uma matriz contendo objetos BitmapData à propriedade bitmaps do ícone. Para alterar a imagem do ícone, atribua uma matriz que contenha as novas imagens a bitmaps . Para remover o ícone, defina bitmaps como null .

Menus de ícones da bandeja do sistema

É possível adicionar um menu ao ícone da bandeja do sistema criando-se um objeto NativeMenu e o atribuindo à propriedade NativeApplication.nativeApplication.icon.menu (o sistema operacional não oferece um menu padrão). Acesse o menu do ícone da bandeja do sistema clicando no ícone com o botão direito do mouse.

Dicas de ferramentas sobre ícones da bandeja do sistema

Adicione uma dica de ferramenta a um ícone definindo a propriedade tooltip:

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

Eventos de ícone da bandeja do sistema

O objeto SystemTrayIcon referenciado pela propriedade NativeApplication.nativeApplication.icon despacha um ScreenMouseEvent para eventos click , mouseDown , mouseUp , rightClick , rightMouseDown e rightMouseUp . Você pode usar esses eventos, junto com um menu de ícone, para que os usuários possam interagir com seu aplicativo quando ele não tiver janelas visíveis.

Exemplo: Criação de um aplicativo sem janelas

O exemplo a seguir cria um aplicativo do AIR que tem um ícone na bandeja do sistema, mas nenhuma janela visível. (A propriedade visible do aplicativo não deve ser definida como true no descrito do aplicativo, ou a janela será visível quando o aplicativo for iniciado.)

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: Ao usar o componente WindowedApplication do Flex, defina o atributo visible da tag WindowedApplication como false . Este atributo substitui a configuração no descritor de aplicativo.
Nota: O exemplo pressupõe que existem arquivos de imagem chamados AIRApp_16.png e AIRApp_128.png em um subdiretório icons do aplicativo. (Arquivos de ícone de exemplo, que você pode copiar para a pasta do seu projeto, são fornecidos no SDK do AIR.)

Ícones e botões da barra de tarefas do Windows

As representações em forma de ícone de janelas geralmente são exibidas na área de janela de uma barra de tarefas ou de um encaixe, para que os usuários tenham fácil acesso a janelas em segundo plano ou minimizadas. O encaixe do Mac OS X exibe um ícone do seu aplicativo e um ícone de cada janela minimizada. As barras de tarefas do Microsoft Windows e do Linux exibem um botão que contém o ícone do programa e o título de cada janela de tipo normal do seu aplicativo.

Realce do botão da janela na barra de ferramentas

Quando uma janela está em segundo plano, você pode notificar o usuário de que ocorreu um evento de interesse relacionado à janela. No Mac OS X, você pode notificar o usuário fazendo o ícone de encaixe do aplicativo pular (conforme descrito em Fazer o encaixe pular ). No Windows e no Linux, você pode realçar o botão da barra de tarefas da janela chamando o método notifyUser() da ocorrência NativeWindow. O parâmetro type passado para o método determina a urgência da notificação:

  • NotificationType.CRITICAL : o ícone da janela fica piscando até o usuário colocar a janela no primeiro plano.

  • NotificationType.INFORMATIONAL : o ícone da janela fica realçado pela troca de cores.

    Nota: No Linux, só há suporte para o tipo informativo de notificação. Passar um dos valores de tipo para a função notifyUser() criará o mesmo efeito.

    A seguinte instrução realça o botão da barra de tarefas de uma janela:

    stage.nativeWindow.notifyUser(NotificationType.CRITICAL); 

    Chamar o método NativeWindow.notifyUser() em um sistema operacional que não dá suporte a notificações de janela não produz qualquer efeito. Use a propriedade NativeWindow.supportsNotification para determinar se a notificação de janela é suportada.

Criação de janelas sem botões ou ícones na barra de tarefas

No sistema operacional Windows, as janelas criadas com os tipos utility ou lightweight não aparecem na barra de tarefas. As janelas invisíveis também não.

Como a janela inicial é necessariamente do tipo normal , para criar um aplicativo sem nenhuma janela aparecendo na barra de tarefas, você deve fechar a janela inicial ou deixá-la invisível. Para fechar todas as janelas do seu aplicativo sem encerrá-lo, defina a propriedade autoExit do objeto NativeApplication como false antes de fechar a última janela. Para impedir que a janela inicial se torne visível, adicione <visible>false</visible> ao elemento <initalWindow> do arquivo de descrição do aplicativo (e não defina a propriedade visible como true ou chame o método activate() da janela).

Nas novas janelas abertas pelo aplicativo, defina a propriedade type do objeto NativeWindowInitOption passado para o construtor de janela como NativeWindowType.UTILITY ou NativeWindowType.LIGHTWEIGHT .

No Mac OS X, as janelas minimizadas são exibidas na barra de tarefas do encaixe. Para impedir que o ícone minimizado seja exibido, oculte a janela em vez de minimizá-la. O exemplo a seguir monitora um evento de alteração nativeWindowDisplayState e o cancela se a janela está sendo minimizada. O manipulador define a propriedade visible da janela como false :

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

Se uma janela está minimizada no encaixe do Mac OS X quando você define a propriedade visible como false , o ícone no encaixe não é removido. Um usuário ainda poderá clicar no ícone para fazer com que a janela reapareça.