2013-08-18 77 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()回調類。 –