将Android事件绑定到Qt应用程序

时间:2014-04-18 18:58:54

标签: java android c++ qt events

我检查了自动生成的QtActivity.javaQtApplication.java,找到了骨架和实际的实现以及它们遵循的简单格式。但是,从这两个来源我只能到m_delegateObject中的QtApplication对象,这是在从android接收事件时调用方法的对象。

但我仍然无法理解委托对象的来源。有public static void setQtActivityDelegate(Object listener)但我不知道最终会被调用的地方。由于在委托上使用了反射,我逻辑上假设它确实是另一个java对象而不是实际本机应用程序的委托。

我的问题是如何使用什么机制(Qt meta,JNI ......?)来实现C ++应用程序并将自定义事件转发给它。

1 个答案:

答案 0 :(得分:0)

没有完全按照你的要求做,但是如果你在java中收到通知,那么你可以从java调用C ++代码:

  • 在Java中,您必须声明本机函数
  

package com.test.util;   ...   private static native void CallCpp(String tag,int prm1,int prm2,int   prm3,String prmString);

并在C ++端注册本机fn

    JNINativeMethod methods[] {{"CallCpp","(Ljava/lang/String;IIILjava/lang/String;)V", reinterpret_cast<void> *>(CallCpp)},
                              };


        QAndroidJniObject javaClass("com/tests/util/AndroidEnv");
        QAndroidJniEnvironment env;
        jclass objectClass = env->GetObjectClass(javaClass.object<jobject>());
        env->RegisterNatives(objectClass, methods, sizeof(methods) / sizeof(methods[0]));
        env->DeleteLocalRef(objectClass);