JNI:使用 android.os.Bundle 实例访问 'keySet' 方法

JNI: Access to 'keySet' method with android.os.Bundle instance

我试图在启动 activity 时从 Intent 获取额外捆绑包中使用的密钥列表。额外的包正在从意图中返回,但是当我尝试获取键集时,jmethodID 返回 null:

JNIEnv* jni = ...;
jobject extraBundle = ...; // from 'Intent.getExtras()'
jclass  bundleClass = jni->GetObjectClass(extraBundle);
jmethodID keySetMethod = jni->GetMethodID(bundleClass, "keySet", "()Ljava/util/Set"); // keySetMethod == nullptr

keySet 方法来自 android.os.BaseBundleandroid.os.Bundle 派生自。我已经使用 java -s android.os.BaseBundle 验证了签名。我试过使用 jni->FindClass("android/os/BaseBundle"),并将其用作 jclass,但结果相同。

我做错了什么吗?

class 签名不正确。
当你指定一个对象时,你必须使用这种格式 Lobject;.

jmethodID keySetMethod = jni->GetMethodID(bundleClass, "keySet", "(V)Ljava/util/Set;");