目次 - API(機能別) - 特定の環境 - SDL_AndroidGetJNIEnv

# SDL_AndroidGetJNIEnv

Androidの現在のスレッドのJavaネイティブインターフェースオブジェクト(JNIEnv)を得る

## 構文

`void* SDL_AndroidGetJNIEnv()`

## 戻り値

現在アタッチしているスレッドのJavaネイティブインターフェースオブジェクト(JNIEnv)を戻す. 失敗のとき0を戻す.

## サンプルコード

``

    #include "SDL.h"
    #include <jni.h>

    // このサンプルはC++と "void showHome()" という名前のJavaカスタムメソッドが必要である

    // Javaのアクティビティのインスタンスの void showHome() メソッドを呼ぶ
    void showHome(void)
    {
        // JNI環境を得る
        JNIEnv* env = (JNIEnv*)SDL_AndroidGetJNIEnv();

        // SDLActivityのJavaインスタンスを得る
        jobject activity = (jobject)SDL_AndroidGetActivity();

        // アクティビティのJavaクラスを検索する. SDLActivityかそのサブクラスである必要がある
        jclass clazz(env->GetObjectClass(activity));

        // メソッドのIDを得る
        jmethodID method_id = env->GetMethodID(clazz, "showHome", "()V");

        // Javaメソッドを実際に呼ぶ
        env->CallVoidMethod(activity, method_id);

        // ローカル参照を解放する
        env->DeleteLocalRef(activity);
        env->DeleteLocalRef(clazz);

        // 注意(とAndroid用SDLの実装の詳細に関する記述):
        // もしJava側が呼んだネイティブ関数から戻ると, ローカル参照は自動的に削除
        // される. SDLではmain()それ自身がネイティブ関数である. したがって, 参照
        // は手動で削除しなければならない. そうしないとmain()から戻って(アプリケー
        // ションが終了して)始めて参照が削除されるからである.
    }

## 詳細

これはネイティブコードからJava仮想マシンにアクセスするのに必要なJNIEnvであり, Cから多くのAndroid APIを使うために必要なものである.

この関数はJNIEnv型を戻すが, 戻り値の関数プロトタイプはvoid*で定義されている. SDLのヘッダにはjni.hがインクルードされていないためである.

## バージョン

SDL 2.0.0以降

## 関連項目(関数)

SDL_AndroidGetActivity

## SDL Wikiへのリンク

SDL_AndroidGetJNIEnv - SDL Wiki