作成日

2 November 2010

その他の必要条件

  • Adobe AIR SDK 2.0
  • Flash Builder 4.0.1もしくはFlash Professional CS5
 
2010年6月9日にAdobe AIR 2がリリースされました。約2年半振りのメジャーバージョンアップとなり、多くの新機能追加と機能強化が行われています。本連載(全9回予定)では、 それら機能について詳しく説明するとともに、サンプルアプリを用いながらその使い方を解説していきます。

第1回 Adobe AIR 2をはじめよう
第2回 サーバーソケット/ データグラムソケットなどのネットワーク系機能
第3回 Safari 4.0.3 と同等の WebKit を搭載
第4回 プリンタ情報の取得や印刷ダイアログの制御
第5回 OSネイティブな機能との連携
第6回 OSネイティブとの統合
第7回 グローバルエラーハンドラー/IMEテキスト入力の機能強化

本記事では、Adobe AIR 2から強化されたネイティブ連携について紹介します。ネイティブ連携とは、OSネイティブな機能とAdobe AIRとの連携のことです。ネイティブ連携における強化された点と新たに追加された機能についてサンプルを交えながら解説します。

本記事のサンプル:AIR2master05sample.zip

新機能について

Adobe AIR 1のネイティブ連携は、ファイル処理のみでした。しかし、Adobe AIR 2からは以下の2つの新しい機能が追加されています。

  • ドラッグ&ドロップの拡張
  • ファイルをデフォルトアプリケーションで開く

それでは、個々の機能について詳しく解説していきましょう。

ドラッグ&ドロップの拡張

Adobe AIR 1では、AIRアプリケーションからドラッグ&ドロップした場所を特定することやそこにファイルを作ることはできませんでした。Adobe AIR 2からは、ドラッグ&ドロップした場所にファイルを作成することができる「ファイルプロミス」という機能が追加されました。

ファイルプロミス機能を使うためには、IFilePromiseインターフェイスを実装する必要があります。デフォルトでは、指定されたURLのリソースをダウンロードするためのURLFilePromiseクラスが用意されています。その詳細については、サンプル「URLFilePromiseSample」を使って説明します。なお、URLFilePromiseクラスでは実現できないファイルプロミスを作成する場合は、IFilePromiseインターフェイスを実装します。

サンプル「URLFilePromiseSample」を実行すると下記の画面が表示されます。

ダウンロードしたいリソースをURL欄に入力して、[確認]ボタンをクリックします。入力された文字がhttp://かhttps://から始まっていれば画面左にドラッグ&ドロップ可能な矢印アイコンが表示されます。

その矢印アイコンをデスクトップなどにドラッグ&ドロップするとその場所にファイルがダウンロードされます。

以下は、このサンプルのコードです。ファイルプロミスは、ドラック開始時に利用します。その手順をソースコードに合せて説明します。

サンプルコード: URLFilePromiseSample.mxml

protected function dragStart(event:MouseEvent):void { //1.クリップボード生成 var clipboard:Clipboard = new Clipboard(); if (clipboard.supportsFilePromise) { const downloadUrl:String = urlTxt.text; downloadStop(); //2.ファイルプロミス生成 filePromise = new URLFilePromise(); //3.ダウンロード元の指定 filePromise.request = new URLRequest(downloadUrl); //4.保存ファイル名の指定 var fileName:String; var lastSlashIndex:int = downloadUrl.lastIndexOf("/"); if( lastSlashIndex == downloadUrl.length-1 ){ fileName = "no_name"+(new Date()).time; } else { fileName = downloadUrl.substring(downloadUrl.lastIndexOf("/")+1); } filePromise.relativePath = fileName; //5.FilePromiseイベントハンドリング filePromise .addEventListener(Event.OPEN,filePromiseDownloadStart); filePromise .addEventListener(Event.COMPLETE,filePromiseDownloadStop); //6.クリップボードにファイルプロミスを格納 clipboard.setData( ClipboardFormats.FILE_PROMISE_LIST_FORMAT,[filePromise]); //7.ドラッグ開始 NativeDragManager.doDrag(this,clipboard, ImageSnapshot.captureBitmapData(dragIndicator), new Point(-15,-10) ); … } }
  1. クリップボードの生成
    まず、ファイルプロミスをデータとしてドラッグさせるためにClipboardクラスのインスタンスを生成します。後程このクリップボードにファイルプロミスを設定します。
  2. ファイルプロミスの生成
    URLFilePromiseクラスは、指定されたURLのリソースをダウンロードするためのファイルプロミスです。このクラスを使ったファイルプロミスをAIRアプリケーションの外にドロップすると、URLFilePromiseのrequestプロパティで指定したURLRequestを使ってFlash Player内部でダウンロードを開始します。そのダウンロードしたデータはドロップしたディレクトリに保存され、そのファイル名はURLFilePromiseのrelativePathプロパティで指定した値となります。
  3. ダウンロード元の指定
    ダウンロード元を示すURLRequestをURLFilePromiseのrequestプロパティで指定します。
  4. 保存ファイル名の指定
    ダウンロードするデータの保存ファイル名をURLFilePromiseのrelativePathプロパティで指定します。
  5. URLFilePromiseのイベントハンドラの設定
    下記の2つのイベントをハンドリングしています。
    • Event.OPEN(ダウンロード先のURLStream接続が開かれたイベント)
    • Event.COMPLETE(ダウンロードが完了したイベント)
  6. クリップボードにURLFilePromiseを設定
    ドラッグしているデータとしてURLFilePromiseを配列で保持させます。
  7. ドラッグ開始
    クリップボードを指定してドラッグを開始させます。そして、AIRアプリケーションの外にドロップすることで、ダウンロードが始まります。

ファイルをデフォルトアプリケーションで開く

Adobe AIR 1では、ファイルやディレクトリの作成/削除などといったOSネイティブなファイル処理を行えますが、ファイルをデフォルトアプリケーションで開くことができませんでした。Adobe AIR 2では、テキストやPDFやMP3などの一般的なファイルを、OSで関連付けされているアプリケーションで開くことができるようになります。なお、ユーザの閲覧権限によっては、開けないファイルがあります。

例えば、PDFの拡張子が付いているファイルであれば、Acrobat Readerでファイルを開きます。指定したファイルを関連付けされているアプリケーションで開くためには、FileクラスのインスタンスメソッドopenWithDefaultApplicationを利用します。

サンプル「OpenWithDefaultApplicationSample」を実行すると下記の画面が表示されます。[ファイルを開く…]ボタンをクリックすると、ファイル選択ダイアログが開きます。そして、ダイアログで選択されたファイルをデフォルトアプリケーションで開きます。

以下は、このサンプルのコードです。

サンプルコード:OpenWithDefaultApplicationSample.mxml

<?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"> <fx:Script> <![CDATA[ import mx.controls.Alert; protected function button1_clickHandler(event:MouseEvent):void { var fd:File = new File(); fd.addEventListener(Event.SELECT,fileOpen); fd.browseForOpen("ファイルを開く..."); } protected function fileOpen(event:Event):void{ var file:File = event.target as File; try{ file.openWithDefaultApplication(); } catch( e:Error ){ Alert.show("下記のファイルはAIRから開けません。\t"+file.nativePath,"エラー"); } } ]]> </fx:Script> <s:Button label="ファイルを開く..." click="button1_clickHandler(event)"/> </s:WindowedApplication>

なお、下記のようなOSネイティブのコア機能にアクセスすることができる実行ファイルやスクリプトファイルなどは、File.openWithDefaultApplication()メソッドでは開くことができません。

拡張子 種類
制限を受ける実行ファイルやスクリプトファイル
bat バッチファイルコマンド
cmd DOS および Windows コマンドファイル
com コマンド
csh UNIX csh シェルスクリプト
dash UNIX dash シェルスクリプト
ksh UNIX ksh シェルスクリプト
sh UNIX シェルスクリプト
tcsh UNIX tcsh シェルスクリプト
zsh UNIX zsh シェルスクリプト
exe 実行可能ファイル
lnk Windows ショートカットファイル
pif プログラム情報ファイル
reg Windows 95/98 用の登録情報・登録キー、レジストリデータファイル
scf Windows Explorer のコマンド
shb、shs シェルスクラップオブジェクトファイル
prg プログラムファイル
vb、vbe、vbs VBScript ファイル
vsmacros Visual Studio .NET バイナリベースのマクロプロジェクト
ws、wsc、wsf、wsh Windows スクリプトファイル
fxp コンパイル済み Fox Pro ソースコード
mas Microsoft Access ストアドプロシージャ
scr Windows スクリーンセーバー
py、pyc Python スクリプトファイル
pl Perl スクリプトファイル
cgi Common GatewayInterface(CGI)スクリプトファイル
msi、msm、msp、mst、idt、cub、pcp Windows インストーラーファイル
job Windows タスクスケジューラーのタスクオブジェクト
jar、js、jse Java アーカイブファイル、JavaScript ファイル、JScript エンコードスクリプトファイル
url インターネットショートカット
hta HTML アプリケーション
rb(Linuxのみ) Ruby シェルスクリプト
desktop(Linuxのみ) デスクトップファイルおよびショートカット
directory(Linuxのみ) ディレクトリファイルおよびショートカット
MAC OS Xのみの制限
Mac OS X Java アプレット
Mac OS X AppleScript プラグイン
Mac OS X ウィジェット

こうした制限がありますが、AIRアプリケーションの機能で、すべての形式のファイルを開く必要がある場合もあるでしょう。その場合、AIRアプリケーションをネイティブインストーラーでインストールすれば、制限を受けることなくすべての形式のファイルを開くことができます。ネイティブインストーラーについては「第6回 OSネイティブとの統合」で紹介します。

おわりに

本記事では、Adobe AIR 2で強化されたネイティブ連携について説明しました。サンプルコードを実行することで、Adobe AIR 2のOSネイティブとの連携について理解できると思います。Adobe AIR 2では、OSに依存することなくOSネイティブと連携するマルチプラットフォームアプリケーションの開発が行えます。また、OSネイティブのコア機能を統合したAIRアプリケーションについては、「第6回 OSネイティブとの統合」で説明します。