Treba da realizujem nativnu C funkciju u okviru Android aplikacije, ali tako da ta funkcija ima mogućnost pozivanja određene Java metode iz klase u kojoj je deklarisana i ta nativna metoda. Ovo treba da radi kao callback, jer će nativna funkcija raditi duže vremena u petlji, a tokom rada bi trebalo da šalje povratne signale roditeljskoj Java klasi, bez izlaska iz same funkcije.
Imam Activity koji sadrži jedan EditText i jedan Button. Klikom na Button se poziva nativna funkcija (nativeMethod), koja onda iz sebe pozove Java metodu (callback), a koja onda ubaci neki tekst u EditText (trivijalna situacija, treba mi samo da isprobam da li to radi).
Nativna funkcija izgleda ovako:
Međutim, čim kroči u nativnu funkciju, program krešuje (kako god da pokušam da pročitam jclass, i preko prve i preko ove druge iskomentarisane varijante). Guglam ceo dan i nalazim svašta ali ništa konkretno, da li je neko imao slična iskustva? Hvala unapred.
Imam Activity koji sadrži jedan EditText i jedan Button. Klikom na Button se poziva nativna funkcija (nativeMethod), koja onda iz sebe pozove Java metodu (callback), a koja onda ubaci neki tekst u EditText (trivijalna situacija, treba mi samo da isprobam da li to radi).
HTML:
public class JNICallbackTestActivity extends Activity {
static {
System.loadLibrary("native");
}
public EditText editText;
public Button btnDodaj;
private native void nativeMethod();
private void callback() {
editText.setText("Calling from C.");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText) findViewById(R.id.editText);
btnDodaj = (Button) findViewById(R.id.btnDodaj);
btnDodaj.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
nativeMethod();
}
});
}
}
Nativna funkcija izgleda ovako:
HTML:
#include <jni.h>
JNIEXPORT void JNICALL Java_rs_pupin_Callbacks_nativeMethod(JNIEnv *env, jobject obj)
{
jclass cls = (*env)->GetObjectClass(env, obj);
//jclass cls = (*env)->FindClass(env, "rs/pupin/JNICallbackTestActivity");
jmethodID msgid = (*env)->GetMethodID(env, cls, "callback", "()V");
if (msgid == 0) return;
(*env)->CallVoidMethod(env, obj, msgid);
}
Međutim, čim kroči u nativnu funkciju, program krešuje (kako god da pokušam da pročitam jclass, i preko prve i preko ove druge iskomentarisane varijante). Guglam ceo dan i nalazim svašta ali ništa konkretno, da li je neko imao slična iskustva? Hvala unapred.