Mam wymóg tworzenia połączeń zwrotnych między natywnym kodem (kod języka c) a kodem Android. pisałem funkcje JNI do wywoływania C code
z android jak ten kodJak utworzyć połączenia zwrotne między kodem systemu Android a natywnym kodem?
JNI tutaj
#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();
}
}
kod C wygląda następująco
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;
}
jest to kod używam w języku C, wywoływanie funkcji initSocket()
z JNI. Teraz chcę utworzyć callback
z tej C code
, gdy on_status1
funkcja wywoływana w tym kodzie. to on_status1 powtórzy się w ciągu kilku sekund, gdy kiedykolwiek zostanie wywołany, chcę wywołać funkcję w kodzie android.
EDIT
Próbowałem tak, ale nie udało
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);
}
I został uznany funkcję takiego w android kodu.
public static void callback(String value) {
Log.e(TAG, "value:" + value);
}
mam już funkcję init() w kodzie JNI, wywołuję tylko kod init() od jni, który wywoła functio() w kodzie c, gdy function() o nazwie ja muszę wywołać funkcję w androidzie utwórz kod natywny. to jest wymaganie, nie dostałem się z kodu u r .. mogę go krótko rozszerzyć, ponieważ jestem nowy w NDK i JNI .. –
byłem edytowane moje pytanie z jakimś kodem może mi pomóc w tym .. –