« 表示オブジェクトからgetQualifiedClassName使って、クラス名取得 | メイン | SubversionのProxy設定 »

AIR2.0 Bata 2 でNativeProcessつかってみる。Flash CS4つかって。

del.icio.us it!   hatena bookmark
AIR2.0 Bata 2 でNativeProcessを試してみます。Mac環境でやってるので、Windowsの人は適当に読み替えてください。
とりあえずFlash CS4でAIR2.0 Bata 2が利用できるに設定

以下を参考にしました。

Adobe AIR 2 ベータ版公開 - akihiro kamijo
http://blogs.adobe.com/akamijo/archives/2009/11/adobe_air_2_3.html

Bata2は以下よりダウンロード
Adobe Labs - Downloads: Adobe AIR 2 Beta 2
http://labs.adobe.com/downloads/air2.html



環境ができたら、CS4でAIRのプロジェクトを作ります。
今回はpingの結果をtraceで表示させてみます。
pingコマンドはターミナルで実行するとこんな感じになります。
$ ping google.com
PING google.com (66.249.89.147): 56 data bytes
64 bytes from 66.249.89.147: icmp_seq=0 ttl=51 time=10.121 ms
64 bytes from 66.249.89.147: icmp_seq=1 ttl=51 time=11.729 ms
64 bytes from 66.249.89.147: icmp_seq=2 ttl=51 time=11.633 ms
64 bytes from 66.249.89.147: icmp_seq=3 ttl=51 time=9.520 ms


まずはドキュメントクラスをこんな感じで作ります。
package 
{
    import flash.desktop.*;
    import flash.filesystem.*;
    import flash.events.*;
    import flash.display.Sprite;

    // pingをairから実行して、結果をtraceに表示してみる
    public class NPSample extends Sprite 
    {
        private var _process:NativeProcess;

        public function NPSample()
        {
            addEventListener(Event.ADDED_TO_STAGE, _init);
        }

        private function _init(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, _init);
            stage.align = "LT";
            stage.scaleMode = "noScale";

            var info = new NativeProcessStartupInfo();
            // 実行するプログラムを指定 相対パスの場合、flaのあるフォルダからのパス
            var file:File = File.applicationDirectory.resolvePath("bin/ping.sh");
            info.executable = file;

            // 実行するプログラムに渡す引数
            var args:Vector.<String> = new Vector.<String>();
            args.push("google.com");
            info.arguments = args;
            
            _process = new NativeProcess();
            _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, outputHandler);
            _process.addEventListener(ProgressEvent.STANDARD_INPUT_PROGRESS, progressHandler);
            _process.start(info);

        }

        private function outputHandler(e:ProgressEvent):void 
        {
            // pingの結果を受け取る
            trace(_process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable));
        }

        private function progressHandler(e:ProgressEvent):void 
        {
            trace(e);
        }
    }
}

flaのあるフォルダにbinというフォルダを作ってping.shというファイルを以下の内容で作成します。Windowsだと.batファイルとかでいけるんかな。.batはダメみたいです。
#!/bin/sh
ping "$@" 
これでコンパイルするとpingの実行結果がtraceに出力されます。
こんな感じ
PING google.com (66.249.89.147): 56 data bytes
64 bytes from 66.249.89.147: icmp_seq=0 ttl=51 time=10.121 ms
64 bytes from 66.249.89.147: icmp_seq=1 ttl=51 time=11.729 ms
64 bytes from 66.249.89.147: icmp_seq=2 ttl=51 time=11.633 ms
NativeProcessを使うとOSの機能を使ったAIRアプリが作れるので、いままでAIRでは実現が難しかったアプリもつくれそうですね。

--
追記 2010.02.16
application.xml を書き換えないと動かないってのを書き忘れてました。
詳しくはこちら。
電卓を起動する AIR アプリを作ってみた | tanablog
http://blog.kaihatsubu.com/archives/001676.html
---


Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編] 集合知プログラミング ビジュアライジング・データ —Processingによる情報視覚化手法 御岳百草丸 1200T

トラックバック

このエントリーのトラックバックURL:
http://un-q.net/mt-tb.cgi/429

コメントを投稿

書いたよ!