Вам не нужно делать ничего особенного, это похоже на обычный механизм JNI. Вам нужно получить указатель на объект контекста, затем получить идентификатор метода, который вы хотите вызвать, а затем вызвать его с нужными аргументами.
Конечно, на словах это звучит очень просто, но в коде это становится очень запутанным, поскольку все проверки и вызовы JNI.
Поэтому, на мой взгляд, я не буду пытаться реализовать все это из собственного/JNI-кода, вместо этого я реализую вспомогательный метод на Java, который делает все и просто получает необходимые данные для чтения/записи предпочтения.
Это значительно упростит ваш нативный код и упростит его поддержку.
eg:
//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);
}
}
}
Обратите внимание, что я просто написал код по памяти, так что ожидайте, что он не будет работать сразу после установки.
person
Lucas S.
schedule
22.12.2010