Обратный вызов JNI на JAVA из родной библиотеки - PullRequest
0 голосов
/ 29 января 2020

У меня возникла проблема при вызове обратного вызова из нативной библиотеки в Java. Обратный вызов вызывается в Java, но из вызываемой функции Java я не могу запустить свою деятельность. Новый вызов Intent возвращает NULL. В чем проблема с моим кодом?

Ниже указана моя собственная функция обратного вызова (C Код)

static jclass   native_class_ID;
static jobject  native_object_ID;

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jni_vm, void *reserved){
JNIEnv* env = NULL;

    if ((*jni_vm)->GetEnv(jni_vm,(void**)&env, JNI_VERSION_1_6) != JNI_OK) {
        return JNI_ERR;
    }

    jclass temp  = (*env)->FindClass(env, "com/example/test/Native_Callback"); 
    jmethodID ctor = (*env)->GetMethodID(env, temp, "<init>", "()V"); 

    jobject myo = (*env)->NewObject(env, temp, ctor);

    native_class_ID = (jclass)(*env)->NewGlobalRef(env,temp);
    if (native_class_ID == NULL){
        return JNI_ERR;
    }

    native_object_ID = (jobject)(*env)->NewGlobalRef(env,myo);
    if (native_object_ID == NULL){
        return JNI_ERR;
    }


    (*env)->DeleteLocalRef (env, temp);
    (*env)->DeleteLocalRef (env, myo);

    return JNI_VERSION_1_6;
}


//Below is the function called when an event occurs in native library
{
methodID = (*pEnv)->GetMethodID(pEnv, native_class_ID , "notify_action_complete", "()V")
(*pEnv)->CallVoidMethod(pEnv, native_object_ID , methodID, NULL);
}

Ниже указан мой Java Код

public class Native_Callback extends AppCompatActivity{
.
.
.
    public void notify_action_complete() {
        Intent intent = new Intent(this, VideoPlayback.class);
        startActivity(intent);
    }
.
.
.
}

Notify_action_complete был успешно вызван, когда в Native Side происходит определенное событие, но почему моя активность не начинается? Я новичок в java, пожалуйста, помогите мне с этим

ПРИМЕЧАНИЕ: ClassID / ObjectID хранился на собственной стороне во время JNI_Onload ()

Мое требование - начать Активность VideoPlayback при получении notify_action_complete (). В то время, когда обратный вызов был получен, мое приложение работает с операцией wait_screen.

...