Android将parameter passing给Native Activity

我的android应用程序compirises两个活动:“.MainActivity”和“android.app.NativeActivity”。 后者纯粹用C ++实现。 在button点击“.MainActivity”我开始一个本地的尝试传递一些参数:

public void pressedButton(View view) { Intent intent = new Intent(this, android.app.NativeActivity.class); intent.putExtra("MY_PARAM_1", 123); intent.putExtra("MY_PARAM_2", 321); startActivity(intent); } 

如何从android.app.NativeActivity的入口点(这是一个C函数void android_main(struct android_app* state) )获取MY_PARAM_1和MY_PARAM_2?

Solutions Collecting From Web of "Android将parameter passing给Native Activity"

android_app结构中,有一个名为ANativeActivity* activity的数据成员。 在后者内部,有一个JavaVM *vm和一个误导性的jobject clazzclazz实际上是一个JNI兼容的对象实例指针,指向一个types为android.app.NativeActivity的Java对象,该对象具有所有的Activity方法,包括getIntent()

这里也有一个JNIEnv ,但是看起来没有附加到活动的主线程。

使用JNI invokations来检索intent,然后从intent中抽取。 它是这样的:

 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 = 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