创建 ExtensionContext 实例

要开始处理本机实现,ActionScript 扩展类需要使用 ExtensionContext 静态方法 createExtensionContext() 。该方法返回 ExtensionContext 类的新实例。

package com.example { 
    public class TVChannelController extends EventDispatcher { 
 
        private var extContext:ExtensionContext; 
 
        public function TVChannelController() { 
            extContext = ExtensionContext.createExtensionContext( 
                            "com.example.TVControllerExtension", "channel"); 
             
        } 
        . 
        . 
        . 
    } 
} 

在本示例中,构造函数调用 createExtensionContext() 。虽然扩展类可以通过任何方法调用 createExtensionContext() ,但是通常使用构造函数或其他初始化方法来进行调用。在该类的一个数据成员中保存返回的 ExtensionContext 实例。

注: 建议不要将 createExtensionContext() 作为静态数据成员定义的一部分进行调用。这样做会使运行时提前创建应用程序暂时不需要的扩展上下文。如果应用程序的执行路径最后没有使用该扩展,则创建上下文会浪费设备资源。

createExtensionContext() 方法具有两个参数:一个扩展 ID 参数和一个上下文类型参数。

扩展 ID

createExtensionContext() 方法具有一个字符串参数,该参数是扩展的标识符或名称。此名称与扩展描述符文件的 id 元素中使用的名称相同。(对扩展进行打包时会创建扩展描述符文件)。应用程序开发人员在其应用程序描述符文件的 extensionID 元素中也会使用此名称。如果具有指定名称的扩展不可用,则 createExtensionContext() 将返回 Null

为了避免名称冲突,Adobe 建议为扩展 ID 使用反向 DNS。例如,TVControllerChannel 扩展的 ID 为 com.example.TVControllerExtension 。由于所有扩展共享一个全局命名空间,所以为扩展 ID 使用反向 DNS 可以避免扩展之间出现名称冲突。

上下文类型

createExtensionContext() 方法具有一个字符串参数,该参数是新扩展上下文的上下文类型。该字符串指定关于新扩展上下文作用的详细信息。

例如,假设扩展 com.example.TVControllerExtension 对频道和音量设置都可以操纵。在 createExtensionContext() 中传递 "channel" "volume" 指示新扩展上下文将用于哪项功能。该扩展中的另一个 ActionScript 类(如 TVVolumeController)可以通过将 contextType 值设置为 "volume" 来调用 createExtensionContext() 。本机实现在上下文初始化中使用 contextType 值。

通常,所定义的每一个可能的上下文类型值与本机实现中不同的方法集对应。因此,上下文类型与本机实现中有效的类对应。如果使用同一上下文类型多次调用 createExtensionContext() ,则本机实现通常会创建特定本机类的多个实例。

如果多次调用 createExtensionContext() 所使用的上下文类型各不相同,则本机端通常执行不同的初始化。根据上下文类型,本机端可以创建不同本机类的实例,也可以提供不同的本机函数集。

注: 简单扩展通常仅有一个上下文类型。也就是说,本机实现中只有一个方法集。在这种简单情况下,上下文类型字符串参数可为 Null