扩展上下文初始化

为了使用本机 C 方法,您的扩展的 ActionScript 端首先调用静态方法 ExtensionContext.createExtensionContext() 。调用 createExtensionContext() 会导致运行时执行以下操作:

  • 创建 ExtensionContext 实例。

  • 创建它用于跟踪扩展上下文的内部数据。

  • 调用扩展上下文初始化函数。

扩展上下文初始化函数初始化新扩展上下文的本机实现。使用 FREContextInitializer() 的签名定义扩展上下文初始值设定项函数。

例如,振动示例使用以下函数:

void ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, 
                        uint32_t* numFunctionsToSet, 
                        const FRENamedFunction** functionsToSet) { 
 
    *numFunctionsToSet = 2; 
 
    FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*2); 
    func[0].name = (const uint8_t*)"isSupported"; 
    func[0].functionData = NULL; 
    func[0].function = &IsSupported; 
     
    func[1].name = (const uint8_t*)"vibrateDevice"; 
    func[1].functionData = NULL; 
    func[1].function = &VibrateDevice; 
     
    *functionsToSet = func; 
}

上下文初始化函数收到以下输入参数:

  • 扩展初始化函数创建的扩展数据。请参阅 扩展初始化

  • 上下文类型。向 ActionScript 方法 ExtensionContext.createExtensionContext() 传递一个指定上下文类型的参数。运行时将此字符串值传递给上下文初始化函数。然后该函数使用此上下文类型选择 ActionScript 端可以调用的本机实现中的方法集。每个上下文类型通常都与一组不同的方法相对应。请参阅 上下文类型

    上下文类型的值是 ActionScript 端和本机端之间约定的任意字符串。

    如果您的扩展在本机实现中只有一组方法,请在 ExtensionContext.createExtensionContext() 中传递 null 或空字符串。然后忽略扩展上下文初始值设定项中的上下文类型参数。

  • FREContext 值。当运行时创建扩展上下文时,它会创建内部数据。它将该内部数据与 ActionScript 端的 ExtensionContext 类实例相关联。

    当您的本机实现向 ActionScript 端调度事件时,它会指定该 FREContext 值。运行时使用 FREContext 值将事件调度到相应的 ExtensionContext 实例。请参阅 FREDispatchStatusEventAsync()

    此外,本机函数可以使用该值访问和设置上下文特定的本机数据和上下文特定的 ActionScript 数据。

扩展上下文初始化函数设置以下输出参数:

  • 本机函数的数组。ActionScript 端可以通过使用 ExtensionContext 实例的 call() 方法来调用其中的每个函数。

    每个数组元素的类型均为 FRENamedFunction 。该结构包括一个字符串,该字符串是 ActionScript 端用于调用该函数的名称。该结构还包括指向您编写的 C 函数的指针。运行时将该名称与 C 函数相关联。尽管名称字符串不必与实际的函数名称相匹配,但通常应使用同一名称。

  • 本机函数数组中的函数数量。

明确调用 FREContextInitializer() 函数的 AIR 运行时的序列图位于 扩展初始化 中。