Ho un requisito per la creazione di richiamate tra codice nativo (codice lingua c) e codice Android. Ho scritto funzioni JNI per chiamare C code
dal Android come questo codiceCome creare callback tra codice Android e codice nativo?
JNI qui
#include <android/log.h>
void initSocket();
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_org_pjsip_pjsua_pjsua_1appJNI_initSocket(JNIEnv *jenv, jclass jcls) {
__android_log_write(ANDROID_LOG_INFO, " JNI CODE ", " APP INIT SOCKET");
initSocket();
}
}
codice C si presenta così
void initSocket()
{
/// some more stuff
printf(" initSocket function ");
}
static int worker_thread(void *unused)
{
/// some more stuff
return 0;
}
pj_bool_t on_rx_data1(pj_stun_sock *stun_sock, void *pkt, unsigned pkt_len, const pj_sockaddr_t *src_addr, unsigned addr_len)
{
/// some more stuff
return PJ_TRUE;
}
pj_bool_t on_data_sent1 (pj_stun_sock *stun_sock, pj_ioqueue_op_key_t *send_key, pj_ssize_t sent)
{
/// some more stuff
return PJ_TRUE;
}
pj_bool_t on_status1(pj_stun_sock *stun_sock, pj_stun_sock_op op, pj_status_t status)
{
/// some more stuff
returnsockaddress();
return PJ_TRUE;
}
char* returnsockaddress()
{
/// some more stuff
return ipinttostring(sock_address);
}
char* ipinttostring(unsigned int addr)
{
/// some more stuff
return fullIP;
}
questo è il codice che sto usando in linguaggio C, chiamando la funzioneda JNI. Ora voglio creare un callback
da questo C code
quando la funzione on_status1
chiama in questo codice. questo on_status1 si ripeterà in pochi secondi ogni volta che viene chiamato voglio chiamare una funzione nel codice di Android.
EDIT
ho provato in questo modo, ma non riuscii
JNIEXPORT void JNICALL Java_org_pjsip_pjsua_pjsua_1appJNI_initSocket(JNIEnv *jenv, jobject obj) {
__android_log_write(ANDROID_LOG_INFO, " JNI CODE ", " APP INIT SOCKET");
initSocket();
jclass cls = jenv->GetObjectClass(obj);
jmethodID methodid = env->GetMethodID(cls, "callback", "()V");
if(!methodid) {
return;
}
jenv->CallVoidMethod(obj , methodid);
}
mi è stato dichiarato funzione come questa nel codice Android.
public static void callback(String value) {
Log.e(TAG, "value:" + value);
}
già ho una funzione init() nel codice JNI, sto chiamando solo il codice init() da jni chiamerà functio() nel codice c, quando function() chiamato devo chiamare una funzione in android forma codice nativo questo è il requisito, non ho ricevuto il codice. Non posso espanderlo brevemente perché sono nuovo di NDK e JNI .. –
sono stato modificato con qualche codice posso aiutarmi su questo .. –