每个使用 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 );