Android JNI / NDK应用程序上下文

时间:2013-08-18 19:22:01

标签: android c++ qt java-native-interface

我正在使用JNI通过Qt从Android获取音乐库。我调用了以下Java方法(已经实现),

public String getArtists(Context context)
...

我需要能够获取应用程序的Context才能使其正常工作。

如果它有用,当我使用Java时,以下代码提供了正确的上下文。

MainActivity.this

这个问题可以帮助任何人吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

这取决于您拨打电话的位置。理想情况下,您将在C ++中缓存MainActivity指针。

缓存指针以便在以后的JNI调用中使用的一种方法是将java中的本机函数(例如native void onCreateNative())添加到MainActivity类。在C ++中,您将实现该方法并缓存" thiz"指针:

JNIEXPORT void JNICALL com_package_MainActivity_onCreateNative(JNIEnv *env, jobject thiz)
{
    gCachedActivity = env->NewGlobalRef(thiz);
}

现在,您可以使用gCachedActivity 来使用MainActivity.this

env->CallObjectMethod(obj, s_getArtistsGetArtistsMethodID, gCachedActivity);

当然用你正在调用方法的对象替换obj

最后onCreateNative()应在onCreate()的{​​{1}}方法中调用。