SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

Flash Builder 4.6でAndroid/iOSデバイスのバイブレーター機能を実行するライブラリを作成!

各プラットフォームと連携できる AIR 3 新機能「ネイティブ拡張」の使い方

  • このエントリーをはてなブックマークに追加

ネイティブ Java API

 では、ネイティブ Java APIを使ったネイティブ拡張ライブラリの作成方法を説明します。

開発準備

 ネイティブ Java APIを使って開発するには、下記のjarファイルが必要になります。

AIR 3 HOME/lib/android/FlashRuntimeExtensions.jar

 jarファイルには、ネイティブ拡張を作成するためのクラスやインターフェイスが定義されています。詳細はネイティブ Java API リファレンス(英語)を参照ください。

 今回はネイティブ Java APIのサンプルとして、Androidのバイブレーター機能を実行させるネイティブ拡張ライブラリを作成していきます。

Androidプロジェクト作成

 まず、Eclipseを使用してAndroidプロジェクトを作成します。[ファイル]-[新規]-[Android Project]から[New Android Project]ウィザードを開きます。

 [New Android Project]ウィザードで、Android SDKのターゲットに「Android 2.3.3」を選択します。

 アプリケーション情報を入力します。アプリケーション名を「VibrateANE」として[終了]ボタンをクリックし、プロジェクトを作成します。

 Androidプロジェクトが作成できたら、ネイティブ Java APIの「FlashRuntimeExtensions.jar」をビルドパスに指定します。これで開発環境が整います。

ネイティブ拡張関数クラスを作成

 プラットフォームの機能にアクセスするロジックを記述するためには、com.adobe.fre.FREFunctionを実装したネイティブ拡張関数クラスを実装します。

 ネイティブ拡張関数クラスとは、ActionScript側からネイティブ拡張コンテキスト経由で呼び出すことができるクラスを示します。実装するのは、call関数です。この関数の中にロジックを記述します。ActionScriptにデータを返したい場合は、FREObjectに変換して返り値にします。

作成例

 サンプルファイルでは、call関数の中でAndroidのバイブレーター機能を呼び出す処理を実装しています。

VibratorANE\src\example\ane\func\VibrateNowFunction.java
public class VibrateNowFunction implements FREFunction {

    @Override
    public FREObject call(FREContext context, FREObject[] args) {
        FREObject result = null;
        Activity activity = context.getActivity();
        Vibrator vb = (Vibrator) activity
                .getSystemService(Context.VIBRATOR_SERVICE);

        vb.vibrate(1000);
        return result;
    }
}

ネイティブ拡張コンテキストクラスを実装

 ネイティブ拡張関数をネイティブ拡張コンテキストに登録するため、com.adobe.fre.FREContextクラスを継承してネイティブ拡張コンテキストクラスを実装します。実装する関数については、次の表のようになります。

com.adobe.fre.FREContextクラス実装関数
関数名 目的
getFunctions ネイティブ拡張コンテキストに登録するネイティブ拡張関数マップを返す。このマップは、キーを関数名、値をFREFunctionのインスタンスとし、ネイティブ拡張コンテキスト内部で登録される
dispose ネイティブ拡張コンテキストが破棄されるときに呼びだされる関数

作成例

 サンプルファイルでは、VibrateNowFunctionネイティブ拡張関数クラスのインスタンスをVibrateNowという関数名で登録しています。これによって、ActionScriptからVibrateNowをキーにして、VibrateNowFunctionネイティブ拡張関数を呼び出すことができます。

VibratorANE\src\example\ane\ctx\VibratorANEContext.java
public class VibratorANEContext extends FREContext {

    public VibratorANEContext() {
    }

    @Override
    public Map<String, FREFunction> getFunctions() {
        Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>();

        functionMap.put("VibrateNow", new VibrateNowFunction());

        return functionMap;
    }

    @Override
    public void dispose() {
    }

}

ネイティブ拡張クラスを作成

 ネイティブ拡張コンテキストを管理するため、com.adobe.fre.FREExtensionインターフェイスを実装したネイティブ拡張クラスを作成する必要があります。このクラスは、ネイティブ拡張ごとに1つ作成します。

com.adobe.fre.FREExtensionインターフェイス実装関数
関数名 目的
initialize ネイティブ拡張が初期化されるときに呼びだされる関数。ActionScriptのExtensionContext.createExtensionContext()を呼び出すことで実行される
createContext ネイティブ拡張コンテキストを生成するための関数。引数の値を用いて目的に応じたコンテキストを作成することも可能
dispose ネイティブ拡張が破棄されるときに呼びだされる関数。ActionScriptのExtensionContext.dispose()を呼び出すことで実行される

作成例

 サンプルファイルでは、createContext関数の戻り値にVibratorContextクラスのインスタンスが返るように実装しています。

VibratorANE\src\example\ane\ext\VibratorANEExtension.java
public class VibratorANEExtension implements FREExtension {

    @Override
    public FREContext createContext(String arg0) {
        return new VibratorANEContext();
    }

    @Override
    public void dispose() {
    }

    @Override
    public void initialize() {
    }

}

jarファイル作成

 ソースが作成できたら、コンパイルしてjarファイルを作成します。

作成例

 サンプルファイルでは、Androidプロジェクトのコンテキストメニューの[エクスポート]より、VibratorANE.jarをエクスポートしています。

次のページ
ネイティブ C API

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

有川 榮一(アリカワ エイイチ)

 Arikawa Eiichi @ AKABANA ( http://akabana.net ) アーキテクト, クラスメソッド株式会社 プリンシパル。 Flex / AIR / CF / FMS / Java / C#を使ったアプリケーションソフトウェア設計と開発を中心に仕事をしています。また、Flex ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6308 2011/12/09 17:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング