我正在使用 JNI 通过 Qt 从 Android 获取音乐库。我调用以下 Java 方法(已实现),
public String getArtists(Context context)
...
我需要能够获取应用程序的上下文才能使其正常工作。
如果有帮助的话,当我使用 Java 时,以下代码提供了正确的上下文。
MainActivity.this
有人可以帮助解决这个问题吗?
非常感谢!
最佳答案
这取决于您在哪里调用电话。理想情况下,您将在 C++ 中缓存 MainActivity 指针。
缓存指针以便在以后的 JNI 调用中使用的一种方法是在 Java 中向 MainActivity
类添加一个 native 函数,例如 native void onCreateNative()
。在 C++ 中,您将实现该方法并缓存“thiz”指针:
JNIEXPORT void JNICALL com_package_MainActivity_onCreateNative(JNIEnv *env, jobject thiz)
{
gCachedActivity = env->NewGlobalRef(thiz);
}
现在您可以在原本使用 MainActivity.this
的地方使用 gCachedActivity
env->CallObjectMethod(obj, s_getArtistsGetArtistsMethodID, gCachedActivity);
当然,将 obj
替换为您调用方法的对象。
最后,应在 MainActivity
的 onCreate()
方法中调用 onCreateNative()
。
关于Android JNI/NDK 应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18302837/