从 JNI 开始新的 Activity

Start new Activity from JNI

我想使用来自 JNI 的代码

  Intent intent = new Intent(this, TestActivity.class);
  startActivity(intent);

到目前为止,我编写了下一个代码,但我猜从带有参数的构造函数中收到错误?

jclass intentClass = env->FindClass("android/content/Intent");
jstring actionString =env->NewStringUTF("com.test.package.TestActivity");
jmethodID newIntent = env->GetMethodID(intentClass, "<init>", "(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent");
jobject intent = env->NewObject(intentClass,newIntent,context,actionString);
jclass activityClass = env->FindClass("android/app/Activity");
jmethodID startActivity = env->GetMethodID(activityClass,"startActivity", "(Landroid/content/Intent;)V");
env->CallVoidMethod( intent, startActivity);

错误:

JNI DETECTED ERROR IN APPLICATION: JNI NewObjectV called with pending exception java.lang.NoSuchMethodError: no non-static method "Landroid/content/Intent;.(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent"

context 和 actionString 参数没问题,并在代码的其他地方使用,所以你能帮我吗我不熟悉 JNI,如果我使用它,出于安全原因并尽量避免 pirac。

谢谢

感谢迈克尔: 答案适用于我想用参数函数中的 jobject 上下文做的事情:

   jclass native_context = env->GetObjectClass(context);
    jclass intentClass = env->FindClass("android/content/Intent");
    jclass actionString = env->FindClass("yourPackage/YourActivity");
    jmethodID newIntent = env->GetMethodID(intentClass, "<init>", "(Landroid/content/Context;Ljava/lang/Class;)V");
    jobject intent = env->NewObject(intentClass,newIntent,context,actionString);
    jmethodID methodFlag = env->GetMethodID(intentClass, "setFlags", "(I)Landroid/content/Intent;");
    jobject intentActivity = env->CallObjectMethod(intent, methodFlag, 268435456 );
    jmethodID startActivityMethodId = env->GetMethodID(native_context, "startActivity", "(Landroid/content/Intent;)V");
    env->CallVoidMethod(context, startActivityMethodId, intentActivity);