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 とコンテキストタイプという 2 つのパラメーターがあります。

拡張 ID

createExtensionContext() メソッドには、拡張の識別子、つまり名前を表す String パラメーターがあります。この名前は、拡張記述ファイルの id エレメントで使用する名前と同じです(拡張記述ファイルは、拡張をパッケージ化するときに作成します)。アプリケーション開発者は、アプリケーション記述ファイルの extensionID エレメントでもこの値を使用します。指定された名前の拡張が使用できない場合、createExtensionContext()Null を返します。

名前の競合を避けるため、DNS を逆にした文字列を拡張 ID に使用することをお勧めします。例えば、TVControllerChannel 拡張のIDは com.example.TVControllerExtension となります。すべての拡張が単一のグローバル名前空間を共有するので、拡張 ID に DNS を逆にした文字列を使用すると、拡張間で名前が競合するのを回避できます。

コンテキストタイプ

createExtensionContext() メソッドには、新しい拡張コンテキストのコンテキストタイプを表す String パラメーターがあります。この文字列には、新しい拡張コンテキストで実行することに関する詳細情報を指定します。

例えば、com.example.TVControllerExtension 拡張では、チャンネルとボリューム設定の両方を操作できるとします。createExtensionContext()"channel" または "volume" を渡すことで、新しい拡張コンテキストでどちらの機能が使用されるかを示します。TVVolumeController などの拡張内の他の ActionScript クラスでは、contextType 値として "volume" を指定して createExtensionContext() を呼び出すことができます。ネイティブ実装では、コンテキストの初期化時にこの contextType 値が使用されます。

通常、定義可能なコンテキストタイプの各値は、ネイティブ実装内の異なるメソッドセットに対応します。そのため、コンテキストタイプは実質的に、ネイティブ実装のクラスに対応します。同じコンテキストタイプを指定して createExtensionContext() を複数回呼び出すと、通常はネイティブ実装で特定のネイティブクラスの複数のインスタンスが作成されます。

createExtensionContext() を複数回呼び出すときのコンテキストタイプが異なる場合、通常はネイティブ側で異なる初期化処理が実行されます。コンテキストタイプに応じて、ネイティブ側で異なるネイティブクラスのインスタンスを作成し、異なるネイティブ関数セットを提供できます。

注意: 単純な拡張では多くの場合、コンテキストタイプは 1 つのみです。つまり、ネイティブ実装で 1 つのメソッドセットのみが用意されます。このような単純なケースでは、コンテキストタイプの String パラメーターを Null に設定できます。