ひよっこ。

I want to…

Adobe Air2でGrowlに通知を行う方法

Posted by hikaruworld : 2010 8月 3

ご存知の通りAdobeAir2.0からはいくつかの制限の上でOSのNativeProcessを呼び出す事が出来ます。
これが出来るとOSと色々出来るようになる訳ですが、
とりあえずMacユーザの自分としてはとりあえず思いつくのがGrowlです。
Macユーザにはおなじみのというデスクトップ通知アプリですね。

今回はこの連携が出来るかなーと思って試してみました。

1. Growl側の仕込み

GrowlにはCUIで利用できるインターフェイスとして、growlnotifyという拡張があります。
これを利用すれば

growlnotify -t "タイトル" -m "内容"

と言った形でGrowlに通知を渡す事が出来ます。

ただ、Growl本体インストール時にデフォルトではインストールされないので、
別途、Extras/growlnotify/growlnotify.pkgをインストールしてあげる必要があります。

このインストールをした場合/usr/local/bin/growlnotifyにインストールされます。

2. AdobeAir2からのGrowlをネイティブプロセスで呼び出し

特に変わった事はせず、ネイティブプロセスでgrowlnotifyを叩きます。
ミソとしては、

-a "Adobe AIR Application Installer"

と指定する事でアプリケーションアイコンが画像として設定されるようです(参考)。

以下、コードをコピペ。

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%">
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            private var nativeProcess:NativeProcess;
            protected function btn_clickHandler(event:MouseEvent):void
            {
                if (!NativeProcess.isSupported) {
                    Alert.show("native process cannot execute");
                    return;
                }
                var startupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
                var file:File = new File("/usr/local/bin/growlnotify");
                startupInfo.executable = file;

                var processArgs:Vector.<String> = new Vector.<String>();
                processArgs[0] = "-t";
                processArgs[1] = titleInput.text;
                processArgs[2] = "-m";
                processArgs[3] = descInput.text;
                processArgs[4] = "-a";
                processArgs[5] = "Adobe AIR Application Installer";
                startupInfo.arguments = processArgs;

                nativeProcess = new NativeProcess();
                nativeProcess.start(startupInfo);
            }

        ]]>
    </fx:Script>
    <s:Group>
        <s:layout>
            <s:VerticalLayout />
        </s:layout>
        <mx:Form>
            <mx:FormItem label="タイトル">
                <s:TextInput id="titleInput"/>
            </mx:FormItem>
            <mx:FormItem label="表示内容">
                <s:TextInput id="descInput"/>
            </mx:FormItem>
        </mx:Form>
    </s:Group>
    <s:Button id="btn" click="btn_clickHandler(event)" x="10" y="80" label="Growlに通知"/>
</s:WindowedApplication>

あ、当然ですが、application.xmlに

<supportedProfiles>extendedDesktop</supportedProfiles>

をお忘れなく。

ってやった後にここ
普通に紹介されててあらまという感じでしたがorz…。

以上です。

参考サイト

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。