AIRの最近のブログ記事
Adobe AIR Beta2来ました。Flash CS3用のアップデータも。
最初予想通りコンパイル通らなくて焦ったけど、そこまでAIR専用メソッド使ってなかったので傷は浅かった。
stage.window→stage.nativeWindow
File.resolve()→File.resolvePath()
だけだったかな?
コンパイル後に出来たファイルの動作がちょっと軽くなってるような気がするけど多分気のせいなんだろうな。
以前書いた社内アプリを仕事の息抜きに着々とバージョンアップする。
バージョンアップの度にいちいちairファイルを落としてもらって、インストールしてもらうのが皆さんに申し訳なかったので、アプリ自体が勝手にアップデート作業をするようにした。ていうかこれ最初に実装すべき機能だろ...。仕組みは、サーバ上に最新バージョンを書いた設定ファイルを置いて、起動時にそれを読み、自身のバージョンより新しければairファイルをダウンロードし、勝手にインストールして再起動。AIRのUpdaterという機能で、とても便利。
このGoogle Analytics AIRというのを使ってたら、毎日勝手にバージョンアップが来るからどうやってんのと思って調べてみたら割と簡単に出来た(ちなみにこのソフトの完成度が凄い)。
ソースは以下。softwareUpdate();を実行すれば、ダウンロード開始→再起動まで勝手にやってくれる。
function softwareUpdate(){
//.airファイルのURLを設定
var airUrl:String = "http://hogehoge.com/hogehoge.air";
var urlReq:URLRequest = new URLRequest(airUrl);
var urlStream:URLStream = new URLStream();
var fileData:ByteArray = new ByteArray();
urlStream.addEventListener(Event.COMPLETE, loadComplete);
//ファイルダウンロード開始
urlStream.load(urlReq);
//データ取得完了
function loadComplete(e:Event):void{
urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
makeAirFile();
}
//ダウンロードしたデータを元に、デスクトップに.airファイルを生成
function makeAirFile():void{
//デスクトップに"hogehoge.air"を作る
var file:File = File.desktopDirectory.resolvePath("hogehoge.air");
var fileStream:FileStream = new FileStream();
fileStream.addEventListener(Event.CLOSE, makeComplete);
fileStream.openAsync(file, FileMode.WRITE);
fileStream.writeBytes(fileData, 0, fileData.length);
fileStream.close();
}
//デスクトップにhogehoge.airファイル完成後。アップデート開始
function makeComplete(e:Event):void{
var updater:Updater=new Updater();
var tgtFile:File = File.desktopDirectory.resolvePath("hogehoge.air");
updater.update(tgtFile,"1.0");
}
}
リーダーのささいな一言をきっかけに、社内で情報共有できるスティッキーズ的なアプリをAIRで作ってみた。上の画像クリックで別画像。
見たいメモをクリックでそのタブが展開、Editで編集モード。ポストするとサーバ上のテキストファイルに反映される。<a>のリンクタグや<img>も使えて画像を貼付けたりテキストカラー変更やboldも可能。
仕組みとしては、タブを開くたびに対象メモのテキストファイルをphpからゲット。ポストも同じくphpにテキスト送信してサーバ上に保存。なので他の人も更新された情報がすぐ反映できる。メモのタイトルリストと各メモのphpにアクセスするIDは起動時にサーバからxmlで取得。なのでそのxmlを編集すれば、メモを増やすのも楽々。
長所と短所は他人のメモでも編集できること。最初は、起動時にユーザ選択するようにしようかと思ったけどメンドいから却下。phpはL氏に作っていただきました。ありがたい。てか自分2,3日取り付かれたようにこの作業やってて他の事全然しないという...。仕事しろ...。
しかしこれは便利です。ローカルでのファイルの読み書きも楽なので、ウィンドウの縦の長さとか位置とかを保存して次回起動時に読み込む仕様も勢いだけでサクっとできた。Flashでxml扱う時にやっかいなcrossdomain.xmlも完全に無視でどんどんネットからrss拾ってこれるのでやりたい放題。次バージョンではdel.icio.usと連携で社用ブックマークviewerも兼ねる予定。 これだけの事を、cocoaとかでやろうとすると今の自分の技術力では一体いつ実現するのか遠くを見つめるばかりだが、as3が書けてAIR用に追加された機能調べるだけでこれだけ出来るというお手軽感は大きい。
余談だけど、ウィンドウサイズを保存する機能に関しては当初実装するつもりは無く、各環境での画面解像度を取得して自動的に調整する仕様にしたかったのだけど、画面解像度を取得する方法が分からなくて仕方なくこうなってしまった。ていうか出来るのだろうか?調査不足かな、、。
先日のアップデートでの、Flash CS3からのAIR書き出しを試してみた。
これはなんてお手軽...。ただのActionScript書き出してもつまらないのでせっかくだからAIRのOSネイティブな機能を使ってみようと思い、ドラッグアンドドロップを試す。
ファイルをドロップすると、イベントリスナにファイルの情報が渡される(ファイル名、パス、アイコンなどなど)。その中からアイコンを抽出して、SpriteにaddChildしてやれば普通に扱える。複数ファイルを同時に持ってくる事も可能。という事でアイコン達を飛び交わせてみた。で、それらを書き込んだbitmapにブラーで残像。
ローカルのファイルを扱えるというだけでもFlashとは次元が違う事が出来そうで面白い。ウィンドウを消す事も出来るし、swfでカメラを使う時に面倒な"許可しますか?"みたいな確認も出ない。こんなに簡単にクロスプラットフォームのデスクトップアプリを作れるのは、さすがにインパクト大きいし話題になるのもわかる。もちろん、アプリケーションという観点では王道の言語で作られた物には敵わないけど。パフォーマンスとか、拡張性とか。
