实现 FREFunction 接口

AIR 运行时使用 FREFunction 接口从 ActionScript 代码调用 Java 函数。实现此接口以公开具体功能项。

FREFunction 定义一个方法,即 call() 。当扩展中的 ActionScript 代码调用 ExtensionContext 类的 call() 方法时,AIR 运行时调用此方法。若要查找正确的 FREFunction 实例,运行时可在 FREContext 函数映射中查找。ActionScript 代码使用参数的常规 ActionScript 类型和类将参数队列传递给方法。Java 代码将这些值视为 FREObject 实例。同样,Java call() 方法返回一个 FREObject 实例,ActionScript 代码将此返回值视为 ActionScript 类型。

在实现 FREFunction 类时,应决定 call() 方法参数队列中的参数顺序。由于您同时还编写 ActionScript 端,并在 ExtensionContext 实例的 call() 方法中使用该相同参数顺序,因此,尽管每个本机 Java 函数参数都是 FREObject 类型,但应知道其对应的 ActionScript 类型。

同样,需要决定 Java 函数的返回值(如果有)的 ActionScript 类型。 call() 方法返回此类型的对象。尽管 Java 函数返回值始终是一个 FREObject 实例,但应知道其对应的 ActionScript 类型。

由 FREFunction 对象创建的或传递给它的 FREObject 实例具有有限的有效寿命。在两次函数调用之间,请勿保存对 FREObject 的引用。

FREFunction 示例

下面的示例演示一个简单的 FREFunction 实现。此函数带有一个布尔型参数并返回其取反值。

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; 
    } 
}