我正在使用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