0

I have dynamic library for Android (.so files as result) which have to start a new Activity with Intent and return its result.

I started an activity with the following code:

jobject activity = helper->GetActivity();
jclass activity_class = env->GetObjectClass(activity);
jclass class_intent = env->FindClass("android/content/Intent");
jmethodID newIntent = env->GetMethodID(class_intent, "<init>", "()V");
jobject intent = env->NewObject(class_intent, newIntent);
jstring actionString = env->NewStringUTF("package.MyAction");
jmethodID setAction = env->GetMethodID(class_intent, "setAction", "(Ljava/lang/String;)Landroid/content/Intent;");
env->CallObjectMethod(intent, setAction, actionString);
jmethodID startActivityMethod = env->GetMethodID(ccloc, "startActivityForResult", "(Landroid/content/Intent;I)V");
jint req = (jint)1001;
env->CallVoidMethod(activity, startActivityMethod, intent, req);

Activity has started successfully. But how to return result of this activity?

I think, there is an opportunity to override «onActivityResult» function which will call when activity was finished.

I know that onActivityResult have to be defined at the «activity_class» (since that class is a source of the starting activity).

I get Name of the activity_class:

jclass ccls = env->FindClass("java/lang/Class");
jmethodID mid_getName = env->GetMethodID(ccls, "getName", "()Ljava/lang/String;");
jstring strObj = (jstring)env->CallObjectMethod(activity_class, mid_getName);
Logger::Instance().LogInfo(Java_To_WStr(env, strObj).c_str());

It was logged: com.e1c.mobile.App

Also I get "packageName" of that class with the similar code. It was logged: com.forus.my_project.

I tried to use JNI to override onActivityResult function:

extern "C" JNIEXPORT void JNICALL Java_com_forus_my_project_com_e1c_mobile_App_onActivityResult(JNIEnv * env, jobject obj, jint, jint, jobject data);
extern "C" JNIEXPORT void JNICALL Java_com_e1c_mobile_App_onActivityResult(JNIEnv * env, jobject obj, jint, jint, jobject data);
extern "C" JNIEXPORT void JNICALL Java_com_forus_my_project_onActivityResult(JNIEnv * env, jobject obj, jint, jint, jobject data);

But onActivityResult had not overridden.

How can I override onActivityResult method using JNI / NDK with C++? If it is impossible, how can I return result of the started activity?

0 Answers0