Android JNI/NDK 应用程序上下文

标签 android c++ qt java-native-interface

我正在使用 JNI 通过 Qt 从 Android 获取音乐库。我调用以下 Java 方法(已实现),

public String getArtists(Context context)
...

我需要能够获取应用程序的上下文才能使其正常工作。

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

MainActivity.this

有人可以帮助解决这个问题吗?

非常感谢!

最佳答案

这取决于您在哪里调用电话。理想情况下,您将在 C++ 中缓存 MainActivity 指针。

缓存指针以便在以后的 JNI 调用中使用的一种方法是在 Java 中向 MainActivity 类添加一个 native 函数,例如 native void onCreateNative()。在 C++ 中,您将实现该方法并缓存“thiz”指针:

JNIEXPORT void JNICALL com_package_MainActivity_onCreateNative(JNIEnv *env, jobject thiz)
{
    gCachedActivity = env->NewGlobalRef(thiz);
}

现在您可以在原本使用 MainActivity.this 的地方使用 gCachedActivity

env->CallObjectMethod(obj, s_getArtistsGetArtistsMethodID, gCachedActivity);

当然,将 obj 替换为您调用方法的对象。

最后,应在 MainActivityonCreate() 方法中调用 onCreateNative()

关于Android JNI/NDK 应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18302837/

相关文章:

java - 为 Android 创建 GUI 的具体过程是什么?

python - Eigen 矩阵 vs Numpy 数组乘法性能

c++ - Delphi/C++ Builder - 在 TDBGrid 中设置事件/选定行颜色

c++ - 新运算符(以及 malloc)无法分配 ~ 450 MB 内存

qt - TabView 中进入/退出事件的信号

java - 将 List 放入 Bundle 对象

java - JSONObject 创建抛出空指针异常

android - ScrollView 没有重力。如何使 ScrollView 内的内容为中心

c++ - C 风格的字符串和 C++ 中的运算符重载

qt - 来自向量 x y z 分量的四元数 - 在 Qt 中