2013-08-18 80 views
2

我正在使用JNI从Qt使用Android获取音乐库。我呼吁以下Java方法(已经实现),Android JNI/NDK应用上下文

public String getArtists(Context context) 
... 

我需要能够得到应用的背景下,为了为它工作。

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

MainActivity.this 

有没有人可以在这个问题上的援助?

非常感谢!

+0

你可以显示你试过的jni代码吗? – krsteeve

+0

绝对! http://pastebin.com/Kqjq3NWs这运行没有错误。 – Jacob

回答

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()应该在MainActivityonCreate()方法中调用。

+0

我不确定我是否理解。我是否需要添加一个相当于MainActivity.java的函数? – Jacob

+0

这只是一种方法......但是,将onCreateNative()添加到MainActivity类 – krsteeve

+0

您应该将本地方法'onCreateNative(this)'调用到** MainActivity **的onCreate()回调类。 –