Java API を使用する拡張では、FREExtension インターフェイスを実装する必要があります。この FREExtension インスタンスは、拡張内の Java コードに対する初期エントリポイントとなります。拡張記述ファイルの
<initializer>
エレメントに、クラスの完全修飾名を指定します。Java による実装は、Android-ARM プラットフォームでのみ使用できます。
ネイティブ拡張記述ファイル
を参照してください。
createContext()
メソッドは、
FREExtension
の実装内で最も重要な部分です。拡張の ActionScript コードから
ExtensionContext.createExtensionContext()
が呼び出されると、AIR ランタイムによって
createContext()
メソッドが呼び出されます。このメソッドは FREContext クラスのインスタンスを返す必要があります。ActionScript
createExtensionContext()
メソッドには 1 個の文字列パラメーターがあります。このパラメーターは Java
createContext()
関数に渡されます。この値を使用すると、目的に応じて動作のコンテキストを変化させることができます。コンテキストクラスを 1 つしか使用しない拡張の場合、このパラメーターは無視してかまいません。
FREExtension インターフェイスに備わっている他のメソッドとしては
initialize()
および
dispose()
があります。これらはランタイムによって自動的に呼び出されるメソッドであり、その拡張で必要となる永続的なリソースの作成やクリーンアップを実行するために使用できます。拡張によっては、これらの関数で処理を実行する必要がまったくない場合もあります。
FREExtension を実装するクラスのコンストラクターは、パラメーターを 1 つも受け取ることができません。
FREExtension インスタンスは、ActionScript コードで
createExtensionContext()
が最初に呼び出されたときに AIR ランタイムによってインスタンス化されます。Java 拡張のクラスに対する呼び出しは次の流れに従って実行されます。
FREExtension の例
次に示す例は、FREExtension の単純な実装です。この例では拡張コンテキストを 1 つだけ使用しています。コンテキストに対する参照は、AIR ランタイムによって createContext() メソッドが最初に呼び出されたときに作成されます。この参照は以後使用するために保持されます。
package com.example;
import android.util.Log;
import com.adobe.fre.FREContext;
import com.adobe.fre.FREExtension;
public class Extension implements FREExtension {
private static final String EXT_NAME = "Extension";
private ExtensionContext context;
private String tag = EXT_NAME + "ExtensionClass";
public FREContext createContext(String arg0) {
Log.i(tag, "Creating context");
if( context == null) context = new ExtensionContext(EXT_NAME);
return context;
}
public void dispose() {
Log.i(tag, "Disposing extension");
// nothing to dispose for this example
}
public void initialize() {
Log.i(tag, "Initialize");
// nothing to initialize for this example
}
}
ExtensionContext の例
次に示す例は、ネイティブ拡張の機能をアプリケーションコードに対して提供するような拡張の ActionScript コードです。
package com.example
{
import flash.external.ExtensionContext;
public class ExampleExtension
{
private const extensionID:String = "com.example.Extension";
private var extensionContext:ExtensionContext;
public function ExampleExtension()
{
extensionContext = ExtensionContext.createExtensionContext( extensionID, null );
}
public function usefulFunction( value:Boolean ):Boolean
{
var retValue:Boolean = false;
retValue = extensionContext.call( "usefulFunctionKey", value );
return retValue;
}
}
}
アプリケーションコードの例
ネイティブ拡張を使用するアプリケーションは、拡張によって提供される ActionScript のクラスおよびメソッドにアクセスします(アクセスの方法は、一般の ActionScript ライブラリで提供されるクラスやメソッドにアクセスする場合と同じです)。
var exampleExtension:ExampleExtension = new ExampleExtension();
var input:Boolean = true;
var untrue:Boolean = exampleExtension.usefulFunction( input );