AIR のタスクバーアイコン

Adobe AIR 1.0 およびそれ以降

多くのオペレーティングシステムには、アプリケーションを表すアイコンを格納できるタスクバー(Mac OS X のドックなど)があります。Adobe® AIR® には、 NativeApplication.nativeApplication.icon プロパティを通じてアプリケーションタスクバーアイコンを操作するためのインターフェイスが用意されています。

タスクバーアイコンについて

AIR では、 NativeApplication.nativeApplication.icon オブジェクトが自動的に作成されます。オブジェクトのタイプは、オペレーティングシステムに応じて、DockIcon または SystemTrayIcon のいずれかになります。現在のオペレーティングシステムでこれらの InteractiveIcon サブクラスのどちらがサポートされるかは、 NativeApplication.supportsDockIcon プロパティと NativeApplication.supportsSystemTrayIcon プロパティを使用して確認できます。InteractiveIcon 基本クラスには、 width プロパティ、 height プロパティおよび bitmaps プロパティが用意されており、これらを使用してアイコンで使用するイメージを変更することができます。ただし、DockIcon または SystemTrayIcon 固有のプロパティを対応していないオペレーティングシステムで調べると、ランタイムエラーが発生します。

アイコンに使用するイメージを設定または変更するには、1 つ以上のイメージを格納する配列を作成し、その配列を NativeApplication.nativeApplication.icon.bitmaps プロパティに割り当てます。タスクバーアイコンのサイズは、オペレーティングシステムの種類によって異なる場合があります。サイズ調整による画質の劣化を防ぐには、複数のサイズのイメージを bitmaps 配列に追加します。複数のイメージを追加した場合は、AIR によってタスクバーアイコンの現在の表示サイズに最も近いサイズが選択され、必要な場合にのみサイズが調整されます。次の例では、2 つのイメージを使用してタスクバーアイコンのイメージを設定しています。

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

アイコンイメージを変更するには、1 つ以上の新しいイメージを格納する配列を bitmaps プロパティに割り当てます。 enterFrame イベントまたは timer イベントに応答してイメージを変更すると、アイコンをアニメーション化することができます。

Windows および Linux で通知領域からアイコンを削除するか、または Mac OS X でアイコンの外観をデフォルトに戻すには、 bitmaps に空の配列を設定します。

air.NativeApplication.nativeApplication.icon.bitmaps = [];

ドックアイコン

NativeApplication.supportsDockIcon true の場合、AIR でドックアイコンがサポートされます。 NativeApplication.nativeApplication.icon プロパティは、ドックのアプリケーションアイコンを表します(ウィンドウドックアイコンは除く)。

注意: AIR では、Mac OS X でのドックのウィンドウアイコンの変更はサポートされません。また、アプリケーションドックアイコンに対する変更はアプリケーションの実行中にのみ適用され、アプリケーションが終了されるとアイコンの外観は標準の外観に戻ります。

ドックアイコンのメニュー

コマンドを格納する NativeMenu オブジェクトを作成し、そのオブジェクトを NativeApplication.nativeApplication.icon.menu プロパティに割り当てることで、標準のドックメニューにコマンドを追加することができます。メニューのアイテムは、標準のドックアイコンメニューアイテムの上に表示されます。

ドックのバウンス

NativeApplication.nativeApplication.icon.bounce() メソッドを呼び出すことにより、ドックアイコンをバウンスさせることができます。 bounce() priority パラメーターを informational に設定すると、アイコンが 1 回バウンスします。critical に設定すると、ユーザーがアプリケーションをアクティブにするまでアイコンがバウンスします。 priority パラメーターの定数は、NotificationType クラスで定義されています。

注意: アプリケーションが既にアクティブになっている場合は、アイコンはバウンスしません。

ドックアイコンのイベント

ドックアイコンがクリックされると、NativeApplication オブジェクトから invoke イベントが送出されます。アプリケーションが実行されていない場合は、システムによってアプリケーションが起動されます。それ以外の場合は、 invoke イベントは実行中のアプリケーションインスタンスに送られます。

システムトレイアイコン

NativeApplication.supportsSystemTrayIcon true の場合、AIR でシステムトレイアイコンがサポートされます(現在、Windows と大半の Linux ディストリビューションのみ該当します)。Windows および Linux では、システムトレイアイコンはタスクバーの通知領域に表示されます。デフォルトではアイコンは表示されません。アイコンを表示するには、BitmapData オブジェクトを格納する配列をアイコンの bitmaps プロパティに割り当てます。アイコンイメージを変更するには、新しいイメージを格納する配列を bitmaps に割り当てます。アイコンを削除するには、 bitmaps null に設定します。

システムトレイアイコンのメニュー

NativeMenu オブジェクトを作成し、そのオブジェクトを NativeApplication.nativeApplication.icon.menu プロパティに割り当てることで、システムトレイアイコンにメニューを追加することができます(オペレーティングシステムのデフォルトのメニューはありません)。システムトレイアイコンのメニューにアクセスするには、アイコンを右クリックします。

システムトレイアイコンのツールチップ

アイコンにツールチップを追加するには、tooltip プロパティを設定します。

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

システムトレイアイコンのイベント

NativeApplication.nativeApplication.icon プロパティによって参照される SystemTrayIcon オブジェクトから、 click mouseDown mouseUp rightClick rightMouseDown rightMouseUp の各イベントに対して ScreenMouseEvent が送出されます。これらのイベントをアイコンメニューと一緒に使用すると、アプリケーションに可視のウィンドウがない場合にユーザーがそのアプリケーションを操作できるようになります。

例:ウィンドウがないアプリケーションの作成

次の例では、システムトレイアイコンがあり、可視のウィンドウはない AIR アプリケーションを作成します(アプリケーションの visible プロパティは、アプリケーション記述で true に設定しないようにする必要があります。さもなければ、アプリケーションの起動時にウィンドウが表示されます)。

注意: Flex WindowedApplication コンポーネントを使用している場合、WindowedApplication タグの visible 属性を false に設定する必要があります。この属性は、アプリケーション記述の設定より優先されます。
<html> 
<head> 
<script src="AIRAliases.js" language="JavaScript" type="text/javascript"></script> 
<script language="JavaScript" type="text/javascript"> 
    var iconLoadComplete = function(event) 
    { 
        air.NativeApplication.nativeApplication.icon.bitmaps = [event.target.content.bitmapData]; 
    } 
     
    air.NativeApplication.nativeApplication.autoExit = false; 
    var iconLoad = new air.Loader(); 
    var iconMenu = new air.NativeMenu(); 
    var exitCommand = iconMenu.addItem(new air.NativeMenuItem("Exit")); 
    exitCommand.addEventListener(air.Event.SELECT,function(event){ 
            air.NativeApplication.nativeApplication.icon.bitmaps = []; 
            air.NativeApplication.nativeApplication.exit(); 
    }); 
 
    if (air.NativeApplication.supportsSystemTrayIcon) { 
        air.NativeApplication.nativeApplication.autoExit = false; 
        iconLoad.contentLoaderInfo.addEventListener(air.Event.COMPLETE,iconLoadComplete); 
        iconLoad.load(new air.URLRequest("icons/AIRApp_16.png")); 
        air.NativeApplication.nativeApplication.icon.tooltip = "AIR application"; 
        air.NativeApplication.nativeApplication.icon.menu = iconMenu; 
    } 
 
    if (air.NativeApplication.supportsDockIcon) { 
        iconLoad.contentLoaderInfo.addEventListener(air.Event.COMPLETE,iconLoadComplete); 
        iconLoad.load(new air.URLRequest("icons/AIRApp_128.png")); 
        air.NativeApplication.nativeApplication.icon.menu = iconMenu; 
    } 
 
</script> 
</head> 
<body> 
</body> 
</html>
注意: この例では、 AIRApp_16.png および AIRApp_128.png という名前のイメージファイルがアプリケーションの icons サブディレクトリに含まれていることを前提にしています(サンプルのアイコンファイルは AIR SDK に含まれており、プロジェクトフォルダーにコピーできます)。

ウィンドウのタスクバーのアイコンとボタン

ウィンドウを表すアイコンは、通常はタスクバーまたはドックのウィンドウ領域に表示されます。ユーザーはこれらを使用して、バックグラウンドで実行されているウィンドウや最小化されているウィンドウに簡単にアクセスすることができます。Mac OS X のドックには、アプリケーションのアイコンと最小化された各ウィンドウのアイコンが表示されます。Microsoft Windows および Linux では、アプリケーションで表示する通常種類の各ウィンドウを表すボタンがタスクバーに表示され、各ボタンにプログラムアイコンとタイトルが表示されます。

タスクバーのウィンドウボタンの強調表示

ウィンドウがバックグラウンドで実行されているときに、ウィンドウに関連するイベントが発生したことをユーザーに通知することができます。Mac OS X では、アプリケーションドックアイコンをバウンスさせてユーザーに通知できます( ドックのバウンス の説明を参照)。Windows および Linux では、NativeWindow インスタンスの notifyUser() メソッドを呼び出すと、そのウィンドウに対応するタスクバーボタンが強調表示されます。メソッドに渡される type パラメーターによって、通知の緊急度が決まります。

  • NotificationType.CRITICAL :ユーザーがウィンドウを前面に表示するまでウィンドウアイコンが点滅します。

  • NotificationType.INFORMATIONAL :別の色でウィンドウアイコンが強調表示されます。

    注意: Linux では、サポートされている通知の種類は INFORMATIONAL のみです。 notifyUser() 関数にどの type 値を渡しても同じ効果になります。

    次のステートメントでは、ウィンドウのタスクバーボタンを強調表示します。

    window.nativeWindow.notifyUser(air.NotificationType.INFORMATIONAL);

    ウィンドウレベルの通知がサポートされていないオペレーティングシステムでは、 NativeWindow.notifyUser() メソッドを呼び出しても効果はありません。ウィンドウの通知がサポートされているかどうかを確認するには、 NativeWindow.supportsNotification プロパティを使用します。

タスクバーのボタンまたはアイコンがないウィンドウの作成

Windows オペレーティングシステムでは、 utility または lightweight のタイプで作成されたウィンドウはタスクバーに表示されません。また、不可視のウィンドウもタスクバーに表示されません。

初期ウィンドウのタイプは必ず normal であるため、ウィンドウがタスクバーに表示されないアプリケーションを作成するには、初期ウィンドウを閉じるか、不可視のままにしておく必要があります。アプリケーションを終了しないでアプリケーションのすべてのウィンドウを閉じるには、最後のウィンドウを閉じる前に、NativeApplication オブジェクトの autoExit プロパティを false に設定します。単に初期ウィンドウが可視にならないようにするには、 <visible>false</visible> をアプリケーション記述ファイルの <initalWindow> エレメントに追加します(さらに、 visible プロパティを true に設定したり、ウィンドウの activate() メソッドを呼び出したりしないようにします)。

アプリケーションで開かれる新しいウィンドウでは、ウィンドウコンストラクターに渡される NativeWindowInitOption オブジェクトの type プロパティを NativeWindowType.UTILITY または NativeWindowType.LIGHTWEIGHT に設定します。

Mac OS X では、最小化されたウィンドウはドックタスクバーに表示されます。最小化されたアイコンが表示されないようにするには、ウィンドウを最小化するのではなく非表示にします。次の例では、 nativeWindowDisplayState 変更イベントをリッスンし、ウィンドウが最小化される場合にキャンセルします。その代わりに、ハンドラーでウィンドウの visible プロパティを false に設定します。

function preventMinimize(event){ 
    if(event.afterDisplayState == air.NativeWindowDisplayState.MINIMIZED){ 
        event.preventDefault(); 
        event.target.visible = false; 
    } 
}

visible プロパティを false に設定している場合に Mac OS X ドックでウィンドウが最小化されても、ドックアイコンが削除されるわけではありません。ユーザーは、引き続きアイコンをクリックしてウィンドウを再表示することができます。