android - 在 ndk 应用程序中访问 android 上下文

标签 android android-ndk

有什么方法可以在我的 ndk 应用程序中传递/获取 android 上下文的对象。我想通过 jni 接口(interface)在我的 ndk 应用程序中使用 SharedPreferences。要获取 SharedPreferences 对象的实例,我需要在 Context 对象上调用 getSharedPreferences()。但是我无权访问上下文对象。

如何从 NDK 读取和写入 xml 文件?

任何指针将不胜感激。

最佳答案

您不需要做任何特别的事情,就像常规的 JNI 机制一样。您需要获取指向上下文对象的指针,然后检索要调用的方法 ID,然后使用所需的参数调用它。

当然,在语言上这听起来非常简单,但在代码中它变得非常困惑,因为所有的检查和 JNI 调用。

所以在我看来,我不会尝试从 native /JNI 代码实现整个事情,相反,我将在 Java 中实现一个辅助方法,它制作所有东西并只接收读取/写入首选项所需的数据。

这将大大简化您的 native 代码,并使其更易于维护。

例如:

//Somewhere inside a function in your native code
void Java_com_example_native_MainActivity_nativeFunction(JNIEnv* env, jobject thiz)
{
    jclass cls = (*env)->FindClass(env,"PreferenceHelper");
    if (cls == 0) printf("Sorry, I can't find the class");

    jmethodID set_preference_method_id;

    if(cls != NULL)
    {
        set_preference_method_id = (*env)->GetStaticMethodID(env, cls, "setPreference", "(Ljava/lang/String;Ljava/lang/StringV");

        if(set_preference_method_id != NULL )
        {
            jstring preference_name = (*env)->NewStringUTF(env, "some_preference_name");
            jstring value = (*env)->NewStringUTF(env, "value_for_preference");

            (*env)->CallStaticVoidMethod(env, cls, get_main_id, preference_name, value);
        }
    }
}

请注意,我只是根据内存编写代码,因此预计不会开箱即用。

关于android - 在 ndk 应用程序中访问 android 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4449864/

相关文章:

安卓开发工具包

android - 从 ADB 和 Android SDK 获取 Android 设备标识符

android - 如何从 fragment “Kotlin”中移动 Activity

eclipse - Android NDK源代码已编译并成功构建-但是在Eclipse IDE中无法解析函数 'to_string'

android - 在 Android 中使用相对布局的 onTouchListener 的奇怪跳跃值

java - 尝试保存并检查文件是否保存在内部存储中

Android/dev/uinput 不工作

Android NDK - 如何类型转换对象类

android - 当我们有一个 Activity 的(HFP)蓝牙 SCO 连接时强制 Android A2DP 配置文件工作

android - ARM 警告 : swp{b} use is deprecated for this architecture