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()

アプリケーション Activity を返します。

public native int getResourceId( String resourceString )

Android リソースの ID を返します。

public void dispatchStatusEventAsync( String code, String level )

その FREContext インスタンスに関連付けられている ExtensionContext オブジェクトを介して、アプリケーションに StatusEvent を送出します。

拡張内には、FREContext クラスの具象サブクラスを 1 つまたは複数定義する必要があります。拡張の ActionScript 側で ExtensionContext.createExtensionContext() メソッドが呼び出されると、 FREExtension クラスの実装に含まれる createContext() メソッドにより、それらのクラスのインスタンスが作成されます。

拡張によって提供されるコンテキストの整理は様々な方法で行うことができます。例えば、コンテキストクラスのインスタンスを 1 つ作成し、アプリケーションが存続する期間中ずっとそれを保持することができます。または、存続期間の限られている 1 セットのネイティブオブジェクトと緊密に結びついたコンテキストクラスを 1 つ作成することもできます。その場合は、個々のオブジェクトセットごとに別々のコンテキストインスタンスを作成し、ネイティブオブジェクトとそれに関連付けられているコンテキストインスタンスを一緒に破棄するという使用方法になります。

注意: 何らかの FREByteArray または FREBitmapData オブジェクトに対して acquire() メソッドを呼び出した後は、どのオブジェクトの FREObject クラスで定義されたメソッドを呼び出すこともできません。

メソッドの詳細

getFunctions

public abstract Map<String,FREFunction> getFunctions()

この関数には、そのコンテキストでアクセス可能とされるすべての関数を含んだ Java Map インスタンスを返すコードを実装します。マップのキー値は、何らかの関数が呼び出されたときに FREFunction オブジェクトを検索するために使用されます。

戻り値:

Map<String, FREFunction>
文字列のキー値 1 つとそれに対応する FREFunction オブジェクト 1 つを含んだ Map オブジェクト。この Map オブジェクトは、拡張の ActionScript 側で ExtensionContext クラスの call() メソッドが呼び出されたとき、該当する関数を AIR ランタイムが検索するために使用されます。

例:

次に示す getFunctions() の例では、架空の関数 3 つを含んだ Java HashMap を作成します。これらの関数を拡張の ActionScript 側から呼び出すには、文字列「negate」、「invert」、「reverse」のいずれかを ExtensionContext call() メソッドに渡します。

@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
プリミティブ値または ActionScript オブジェクトを含んだ FREObject。

例:

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

getActivity

public android.app.Activity getActivity()

アプリケーション Activity オブジェクトへの参照を取得します。この参照は、Android SDK の多くの API を使用するために必要です。

戻り値:

android.app.Activity
AIR アプリケーションの Activity オブジェクト。

例:

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 インスタンスです。

通常、この関数が送出するイベントは非同期です。例えば、拡張メソッドから、タスクを実行するための別のスレッドを開始させることができます。他のスレッドのタスクが完了したときには、そのスレッドから、ActionScript ExtensionContext インスタンスに完了を知らせるために dispatchStatusEventAsync() が呼び出されます。

注意: 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; 
    } 
}