有什么方法可以在我的 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/