我正在使用JNI从Qt使用Android获取音乐库。我呼吁以下Java方法(已经实现),Android JNI/NDK应用上下文
public String getArtists(Context context)
...
我需要能够得到应用的背景下,为了为它工作。
如果有帮助,当我使用Java时,下面的代码提供了正确的上下文。
MainActivity.this
有没有人可以在这个问题上的援助?
非常感谢!
我正在使用JNI从Qt使用Android获取音乐库。我呼吁以下Java方法(已经实现),Android JNI/NDK应用上下文
public String getArtists(Context context)
...
我需要能够得到应用的背景下,为了为它工作。
如果有帮助,当我使用Java时,下面的代码提供了正确的上下文。
MainActivity.this
有没有人可以在这个问题上的援助?
非常感谢!
这将取决于你在哪里打电话。理想情况下,您将在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()
应该在MainActivity
的onCreate()
方法中调用。
你可以显示你试过的jni代码吗? – krsteeve
绝对! http://pastebin.com/Kqjq3NWs这运行没有错误。 – Jacob