目次 - API(機能別) - 環境固有の機能 - SDL_AndroidGetActivity

SDL_AndroidGetActivity

AndroidアプリケーションでアクティビティクラスのJavaインスタンスを得る

構文

void* SDL_AndroidGetActivity(void)

戻り値

jobject型のAndroidアプリケーションのアクティビティクラスのインスタンスを戻す. 失敗のときNULLを戻す.

この関数が戻したjobjectはローカルリファレンスで, 呼び出し側が解放する必要がある. JavaネイティブインターフェースのPushLocalFrame(), PopLocalFrame(), DeleteLocalRef()関数を参照すること. (Oracleのドキュメントにある)

サンプルコード

// Javaのアクティビティのインスタンスの void MyActivity.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);
}

詳細

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

関連項目(関数)

SDL_AndroidGetJNIEnv

SDL Wikiへのリンク

SDL_AndroidGetActivity - SDL Wiki