Adicionando um icone no System Tray com Adobe AIR

As vezes você precisa que seu aplicativo rode em “background” bastando acessa-lo por um icone no systray do seu computador. O Adobe AIR suporta essa funcionalidade, sendo possivel usar a interação tanto com o botão direito quanto com o botão esquerdo do mouse.
Vamos pegar uma imagem qualquer para nosso exemplo, como essa: brick
Carregaremos a imagem em nossa aplicação usando a classe Loader, assim que o carregamento estiver completo, sera adicionando no system tray usando a propriedade NativeApplication.nativeApplication.icon.bitmaps.
[ACTIONSCRIPT3]
public function init():void
{
var icon:Loader = new Loader();
icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete);
icon.load(new URLRequest(“brick.png”));
}

private function iconLoadComplete(event:Event):void
{
NativeApplication.nativeApplication.icon.bitmaps = [event.target.content.bitmapData];
}
[/ACTIONSCRIPT3]
Executando a aplicação, veremos a imagem ao lado do relogio do windows. Vamos adicionar um tooltip:
[ACTIONSCRIPT3]
public function init():void
{
var icon:Loader = new Loader();
icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete);
icon.load(new URLRequest(“brick.png”));
var systray:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
if (NativeApplication.supportsSystemTrayIcon)
{
systray.tooltip = “to aqui ô!!! o/”;
}
}
[/ACTIONSCRIPT3]
Rodando o programa veremos o icone aparecendo no system tray, ao passar o mouse por cima, o tooltip.
Agora vamos implementar a ação para quando o usuário clicar com o botão direito do mouse. Usaremos o a classe NativeMenu e NativeMenuItem, é bem parecido com o que já usamos no Flash Player. Vamos instanciar a classe e adicionar um evento para a ação de select:
[ACTIONSCRIPT3]
var iconMenu:NativeMenu = new NativeMenu();
var aboutCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem(“blablabla”));
var webCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem(“Ir para o blog”));
webCommand.addEventListener(Event.SELECT,goURL);
iconMenu.addItem(new NativeMenuItem(“”,true));//separator
var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem(“Exit”)); exitCommand.addEventListener(Event.SELECT, closeApp);
[/ACTIONSCRIPT3]
Agora verificando se o sistema operacional suporta system tray:
[ACTIONSCRIPT3]
if (NativeApplication.supportsSystemTrayIcon)
{
var systray:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
systray.menu = iconMenu;
}
[/ACTIONSCRIPT3]
Segue o código completo:
DOWNLOAD

Referencia:
http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7dcc.html

Translations
English Version

Adobe AIR

16 comments


  1. Ved

    Muito obrigado pelo tutorial! Vai me ajudar bastante! =D

  2. Ved

    Só um detalhe. Se vc quiser complementar sua informação, eu fiz uma verificação se o SO é Mac. Se for, adiciono um icone de 128x128px pois ele será mostrado no dock. Se for windows, insiro o icone padrao de 16x16px.

    // Verifica se é MacOS
    if(NativeApplication.supportsDockIcon){
    icon.load(new URLRequest(“assets/images/icons/icone128x128.png”));
    } else {
    icon.load(new URLRequest(“assets/images/icons/icone16x16.png”));
    }

  3. Boa Ved, não tinha testado ainda no mac ;o)

  4. boa dica, muito útil, vlw!

  5. Boa noite ! Queria deixar a seguinte questão.. Porque razão num video flashchat , apos uns dias de utilização ao entrar um nick ou ao sair do chat , não conseguimos escrever durante breves segundos e apos o server enviar um pedido por E-mail aos serviços do Flash media server para me fazerem reset o chat deixa de bloquiar durante uns dias . o erro é do flash media server ou da configuração do chat?? Antecipadamente o meu Obrigado

  6. Dificil responder assim, entra ai uma serie de fatores, como o servidor esta configurado, a banda da internet usada, erro do programador etc

  7. Adorei o seu blog.

  8. rodrigo

    ola grande leonardo que acompanho a anos, eu tenho uma duvida simples ate, eu to fazendo um navegador tem como eu clicar com o botao direito do mouse e abrir link em outra aba???

    mal se for easy de mas é que to novo nisso ainda.

    flw

  9. Olá, li o seu tutorial, e já li outros similares, mas ainda estou com uma dúvida, seria possível restaurar o aplicativo do system tray, com um comando do teclado(hotkey) algo como o google desktop faz(duplo ctrl)?

  10. Ola, obrigado pelo prestigio! 😀
    Quanto a sua pergunta, possivel sim, da um trabalhinho mas é possivel sim, assim que sobrar um tempo, posso deixar um exemplo no blog 😉

  11. Ola Lucas,
    É possivel sim, basta implemantar o evento de restaurar a janela com o evento do teclado(KeyboardEvent) com um contator simples.
    caso queira, posto um exemplo 😉

  12. Ola amigo,
    Primeiro parabéns pelo blog, conteúdo simples e objetivo, muito bom mesmo.
    Fiquei com uma dúvida, isso funciona da mesma forma no linux?

  13. Ainda nao testei no linux, vou ver se consigo fazer um teste, mas em teoria deve funcionar da mesma forma 😉

  14. Antonio Carlos

    Olá Leonardo..
    Muito bom o post.. contudo tenho uma dúvida.
    Seria possível a janela da aplicação ficar visível mas não aparecer na taskbar?
    No Windows seria mais ou menos como Crtl+R, o famoso “Executar”, .. a janela está visível mas não é representada na barra de tarefas..
    valeu..

  15. é possivel sim, vc vai usar a mesma tecnica para esconder a janela

Leave a Reply