实现 FREExtension 接口

每个使用 Java API 的扩展都必须实现 FREExtension 接口。此 FREExtension 实例是您扩展中的 Java 代码的初始入口点。在扩展描述符文件的 <initializer> 元素中指定类的完全限定名。Java 实现只能用于 Android-ARM 平台。请参阅 本机扩展描述符文件

createContext() 方法是 FREExtension 实现的最重要组成部分。当扩展的 ActionScript 代码调用 ExtensionContext.createExtensionContext() 时,AIR 运行时调用 createContext() 方法。此方法必须返回一个 FREContext 类的实例。ActionScript createExtensionContext() 方法具有一个字符串参数,该传输传递给 Java createContext() 函数。您可使用此值针对不同用途提供不同上下文。如果您的扩展只使用一个上下文类,可忽略此参数。

FREExtension 接口的其他参数 initialize() dispose() 由运行时自动调用,可用于创建和清除扩展所需的任何永久性资源。但是,并不是每个扩展都需要执行这些函数的操作。

FREExtension 实现类的构造函数不得带有任何参数。

当 ActionScript 代码第一次调用 createExtensionContext() 时,AIR 运行时将实例化 FREExtension 实例。Java 扩展类的调用顺序如下:

  • FREExtension 实现类构造函数

  • initialize()

  • createContext()

FREExtension 示例

下面的示例演示一个简单的 FREExtension 实现。此示例使用一个扩展上下文。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 );