我正在使用JNI通过Qt从Android获取音乐库。我调用了以下Java方法(已经实现),
public String getArtists(Context context)
...
我需要能够获取应用程序的Context才能使其正常工作。
如果它有用,当我使用Java时,以下代码提供了正确的上下文。
MainActivity.this
这个问题可以帮助任何人吗?
非常感谢!
答案 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
1>来使用MainActivity.this
env->CallObjectMethod(obj, s_getArtistsGetArtistsMethodID, gCachedActivity);
当然用你正在调用方法的对象替换obj
。
最后onCreateNative()
应在onCreate()
的{{1}}方法中调用。