FREFunction インターフェイスの実装

FREFunction インターフェイスは、ActionScript コードから Java 関数を呼び出すときに AIR ランタイムによって使用されます。このインターフェイスを実装し、機能の具象部分を提供する必要があります。

FREFunction インターフェイスに定義されているメソッドは call() の 1 つだけです。このメソッドは、拡張内の ActionScript コードから ExtensionContext クラスの call() メソッドが呼び出されたときに、AIR ランタイムによって呼び出されます。ランタイムは、FREContext 関数マップ内を検索して適切な FREFunction インスタンスを見つけます。ActionScript 側のコードでは、ActionScript の通常の型やクラスで表現した引数の配列をメソッドに渡します。それらの値は、Java 側のコードには FREObject インスタンスとして渡されます。同じように、Java call() メソッドは FREObject インスタンスを返し、その戻り値は ActionScript コードには何らかの ActionScript 型として渡されます。

FREFunction クラスを実装するときは、 call() メソッドの引数配列に含めるパラメーターの順序を決定します。また、ActionScript 側のコードを作成するときは、それと同じ順序に並べたパラメーターを ExtensionContext インスタンスの call() メソッドに渡すようにします。つまり、Java 関数のパラメーターはすべて FREObject 型ですが、それぞれがどの ActionScript 型に対応するかを決めておく必要があります。

同じように、Java 関数が戻り値を返す場合も、どの ActionScript 型に対応するかを決めておく必要があります。 call() メソッドはこの型のオブジェクトを返します。Java 関数の戻り値は常に FREObject インスタンスですが、どの ActionScript 型に対応するかを決めておく必要があります。

作成される FREObject インスタンスや、FREFunction オブジェクトに渡される FREObject インスタンスの存続期間には限りがあります。FREObject への参照を保存しておいて次回以降の関数呼び出し時に使用することはできません。

FREFunction の例

次に示す例は、FREFunction の単純な実装です。この関数はブール型のパラメーターを 1 つ受け取り、その値を反転して返します。

package com.example; 
 
import com.adobe.fre.FREContext; 
import com.adobe.fre.FREFunction; 
import com.adobe.fre.FREObject; 
 
import android.util.Log; 
 
public class UsefulFunction implements FREFunction { 
    public static final String KEY = "usefulFunctionKey"; 
    private String tag; 
 
    public FREObject call(FREContext arg0, FREObject[] arg1) { 
        ExtensionContext ctx = (ExtensionContext) arg0; 
        tag = ctx.getIdentifier() + "." + KEY; 
        Log.i( tag, "Invoked " + KEY ); 
        FREObject returnValue = null; 
 
        try { 
            FREObject input = arg1[0]; 
            Boolean value = input.getAsBool(); 
            returnValue = FREObject.newObject( !value );//Invert the received value 
 
        } catch (Exception e) { 
            Log.d(tag, e.getMessage()); 
            e.printStackTrace(); 
        } 
        return returnValue; 
    } 
}