Как видно из заголовка, Как я могу вызвать функцию Java из C++
, если функция из другого класса активности Java?
Все примеры и учебники вызывают C++
функцию и java туда и обратно, но вызывающим является класс, а JNIEnv и jobject передаются из java через JNI. Но что, если функция, которую нужно было вызвать, принадлежит другому классу активности Java? Как это сделать? прохождение «этого» действия не сработало
Вот примерный макет классов
Занятие
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
JNIAdapter.launch();
}
private void DisplayLoginDialog()
{
//...
}
}
JNIAdapter.class
public class JNIAdapter {
static {
System.loadLibrary("jnisample-lib");
}
public static native void launch();
}
jnisample.cpp
extern "C"
JNIEXPORT void JNICALL
Java_com_JNIAdapter_launch(JNIEnv *env,jobject object)
{
jclass dataClass = env->FindClass("com/game/ramo/MainActivity");
jmethodID javaMethodRef = env->GetMethodID(dataClass, "DisplayLoginDialog", "()V");
env->CallVoidMethod(object, javaMethodRef);
}
В приведенном выше коде, используя jobject, ссылается на класс JNIAdapter, а не на Activity, следовательно, DisplayLoginDialog () не вызывается.
Как это сделать?