FREContext

包:
com.adobe.fre

继承
java.lang.Object

运行时版本
AIR 3

FREContext 类表示 AIR 本机扩展定义的 Java 执行上下文。

方法

方法

说明

public abstract Map<String,FREFunction> getFunctions()

AIR 运行时调用以发现此上下文提供的函数。

public FREObject getActionScriptData()

获取与此 FREContext 关联的 ActionScript ExtensionContext 对象的 actionScriptData 属性中的所有数据。

public void setActionScriptData( FREObject )

设置与此 FREContext 关联的 ActionScript ExtensionContext 对象的 actionScriptData 属性。

public abstract void dispose()

当与此 FREContext 实例关联的 ActionScript ExtensionContext 对象被丢弃时,由 AIR 运行时调用。

public android.app.Activity getActivity()

返回应用程序活动。

public native int getResourceId( String resourceString )

返回 Android 资源的 ID。

public void dispatchStatusEventAsync( String code, String level )

通过与此 FREContext 实例关联的 ExtensionContext 对象,将 StatusEvent 调度到应用程序。

您的扩展必须定义 FREContext 类的一个或多个实际子类。当扩展的 ActionScript 端调用 ExtensionContext.createExtensionContext() 方法时, FREExtension 类的实现中的 createContext() 方法创建这些类的实例。

您可以采用多种方法组织扩展提供的上下文。例如,您可以创建在应用程序的生存期存在的上下文类的单个实例。或者,可以创建紧密绑定到具有有限生命期的一组本机对象的上下文类。然后为每组对象创建单独的上下文实例,并随关联的本机对象丢弃上下文实例。

注: 如果已经调用了任何 FREByteArray 或 FREBitmapData 对象的 acquire() 方法,则不能调用由任何对象的 FREObject 类定义的方法。

方法详细信息

getFunctions

public abstract Map<String,FREFunction> getFunctions()

实现此函数以返回包含上下文公开的所有函数的 Java Map 实例。调用函数时,映射密钥值用于查找 FREFunction 对象。

返回:

Map<String, FREFunction>
包含字符串密钥值的映射对象和相应的 FREFunction 对象。当扩展的 ActionScript 部分调用 ExtensionContext 类的 call() 方法时,AIR 运行时使用此 Map 对象查找要调用的函数。

示例:

以下 getFunctions() 示例创建包含三个假设函数的 Java HashMap。通过将字符串“negate”、“invert”或“reverse”传递到 ExtensionContext call() 方法,可以调用扩展的 ActionScript 代码中的这些函数。

@Override 
    public Map<String, FREFunction> getFunctions() { 
        Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>(); 
        functionMap.put( "negate", new NegateFunction() ); 
        functionMap.put( "invert", new InvertFunction() ); 
        functionMap.put( "reverse", new ReverseFunction() ); 
        return functionMap; 
}

getActionScriptData

public FREObject getActionScriptData()

获取与此上下文关联的 ActionScript 数据对象。Java 和 ActionScript 代码均可读取或修改此数据对象。

返回:

FREObject
FREObject 表示数据对象。

示例:

FREObject data = context.getActionScriptData();

setActionScriptData

public void setActionScriptData( FREObject object )

设置与此上下文关联的 ActionScript 数据对象。Java 和 ActionScript 代码均可读取或修改此数据对象。

参数:

value
包含原始值的 FREObject 或 ActionScript 对象。

示例:

FREObject data = FREObject.newObject( "A string" ); 
context.setActionScriptData( data );

getActivity

public android.app.Activity getActivity()

获取对应用程序活动对象的引用。Android SDK 中的许多 API 都需要此类引用。

返回:

android.app.Activity
AIR 应用程序的活动对象。

示例:

Activity activity = context.getActivity();

getResourceID

public native int getResourceId( String resourceString )

查找本机 Android 资源的资源 ID。

resourceString 参数中指定标识资源的字符串。遵循 Android 上资源访问的命名约定。例如,在 Android 本机代码中要访问的资源的形式为:

R.string.my_string

具有以下 resourceString

"string.my_string"

如果无法找到由 resourceString 指定的资源,则此方法将引发 Resources.NotFoundException。

参数:

resourceString
标识 Android 资源的字符串。

返回:

int
Android 资源的 ID。

示例:

int myResourceID = context.getResourceID( "string.my_string" );

dispatchStatusEventAsync

public void dispatchStatusEventAsync( String code, String level )

调用此函数可调度 ActionScript StatusEvent 事件。事件的目标是运行时关联此 FREContext 对象的 ActionScript ExtensionContext 实例。

通常,此函数调度的事件为异步事件。例如,扩展方法可启动另一线程来执行某项任务。当其他线程中的任务完成后,该线程会调用 dispatchStatusEventAsync() 以通知 ActionScript ExtensionContext 实例。

注: dispatchStatusEventAsync() 函数是您可从本机实现的任意线程中调用的唯一 Java API。

在下列情况下,运行时不会调度事件:

  • 运行时已释放 ExtensionContext 实例。

  • 运行时正在释放 ExtensionContext 实例。

  • ExtensionContext 实例没有任何引用。应由运行时垃圾回收器来释放该实例。

code level 参数设置为任意字符串值。这些值可以为所需的任何值,但必须将其与扩展的 ActionScript 端保持一致。

参数:

code
要报告的状态的描述。

level
消息的扩展定义的类别。

示例:

context.dispatchStatusEventAsync( "Processing finished", "progress" );

dispose

public abstract void dispose()

当关联的 ActionScript ExtensionContext 对象被丢弃且此 FREContext 对象没有任何其他引用时,由 AIR 运行时调用。您可以实现此方法来清除上下文资源。

类示例

下面的示例创建 FREContext 的一个子类以返回上下文信息:

package com.example; 
import java.util.HashMap; 
import java.util.Map; 
import android.util.Log; 
import com.adobe.fre.FREContext; 
import com.adobe.fre.FREFunction; 
 
public class DataExchangeContext extends FREContext { 
    private static final String CTX_NAME = "DataExchangeContext"; 
    private String tag; 
 
    public DataExchangeContext( String extensionName ) { 
        tag = extensionName + "." + CTX_NAME; 
        Log.i(tag, "Creating context"); 
    } 
    @Override 
    public void dispose() { 
        Log.i(tag, "Dispose context"); 
    } 
    @Override 
    public Map<String, FREFunction> getFunctions() { 
     Log.i(tag, "Creating function Map"); 
     Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>(); 
     functionMap.put( NegateBooleanFunction.NAME, new NegateBooleanFunction() ); 
     functionMap.put( InvertBitmapDataFunction.NAME, new InvertBitmapDataFunction() ); 
     functionMap.put( InvertByteArrayFunction.NAME, new InvertByteArrayFunction() ); 
     functionMap.put( InvertNumberFunction.NAME, new InvertNumberFunction() ); 
     functionMap.put( ReverseArrayFunction.NAME, new ReverseArrayFunction() ); 
     functionMap.put( ReverseStringFunction.NAME, new ReverseStringFunction() ); 
     functionMap.put( ReverseVectorFunction.NAME, new ReverseVectorFunction() ); 
 
    return functionMap; 
    } 
 
    public String getIdentifier() 
    { 
        return tag; 
    } 
}