मुझे मूल कोड (सी भाषा कोड) और एंड्रॉइड कोड के बीच कॉल बैक बनाने की आवश्यकता है। मैं यहाँ इसएंड्रॉइड कोड और मूल कोड के बीच कॉलबैक कैसे बनाएं?
JNI कोड की तरह एंड्रॉयड से C code
फोन करने के लिए JNI कार्यों लिखा
#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();
}
}
सी कोड की तरह दिखता है इस
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;
}
इस कोड को मैं सी भाषा में उपयोग कर रहा हूँ है, जेएनआई से initSocket()
फ़ंक्शन को कॉल करना। अब मैं इस C code
से on_status1
फ़ंक्शन को कॉल करने के लिए callback
बनाना चाहता हूं। यह on_status1 कुछ सेकंड में दोहराएगा जब कभी इसे कहा जाता है मैं एंड्रॉइड कोड में एक फ़ंक्शन कॉल करना चाहता हूं।
संपादित
मैं इस तरह की कोशिश की, लेकिन
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);
}
मैं एंड्रॉयड कोड में इस तरह समारोह घोषित किया गया था सफल नहीं।
public static void callback(String value) {
Log.e(TAG, "value:" + value);
}
पहले से ही मेरे पास जेएनआई कोड में एक init() फ़ंक्शन है, मैं jni से केवल init() कोड को कॉल कर रहा हूं, यह c कोड में functio() को कॉल करेगा, जब फ़ंक्शन() कहा जाता है कि मुझे एंड्रॉइड में एक फ़ंक्शन कॉल करना है देशी कोड फार्म। यह जरूरी है, मुझे आपके आर कोड से नहीं मिला .. क्या आप इसे संक्षेप में विस्तारित कर सकते हैं क्योंकि मैं एनडीके और जेएनआई के लिए नया हूं .. –
मुझे कुछ प्रश्न के साथ मेरा प्रश्न संपादित किया गया था, क्या आप इस पर मेरी मदद कर सकते हैं .. –