在android_app结构中有一个名为activitytype的数据成员ANativeActivity*。在后者内部,有 aJavaVM *vm和 a 被误导性地称为jobject clazz. clazz实际上,它是一个符合 JNI 的对象实例指针,指向类型为 的 Java 对象,android.app.NativeActivity它具有所有Activity方法,包括getIntent().
那里也有一个JNIEnv,但看起来它没有附加到活动的主线程。
使用 JNI 调用来检索意图,然后从意图中获取额外内容。它是这样的:
JNIEnv *env;
state->activity->vm->AttachCurrentThread(&env, 0);
jobject me = state->activity->clazz;
jclass acl = env->GetObjectClass(me); //class pointer of NativeActivity
jmethodID giid = env->GetMethodID(acl, "getIntent", "()Landroid/content/Intent;");
jobject intent = env->CallObjectMethod(me, giid); //Got our intent
jclass icl = env->GetObjectClass(intent); //class pointer of Intent
jmethodID gseid = env->GetMethodID(icl, "getStringExtra", "(Ljava/lang/String;)Ljava/lang/String;");
jstring jsParam1 = (jstring)env->CallObjectMethod(intent, gseid, env->NewStringUTF("MY_PARAM_1"));
const char *Param1 = env->GetStringUTFChars(jsParam1, 0);
//When done with it, or when you've made a copy
env->ReleaseStringUTFChars(jsParam1, Param1);
//Same for Param2