使用 Qt 在 Android 上实现 NFC

NFC implementation on Android using Qt

我正在尝试使用 Qt 从 Android 上的 nfc 卡读取 UID。 a一方面,经过一番研究,我在Java中找到了thisclass供阅读。 另一方面,我已经阅读了 Qt 文档如何使用 QAndroidJniObject::callStaticObjectMethod 从 Java 调用和静态对象,但我不知道如何使用 Qt 的模块 [=] 创建 activity 17=]Extras,并在启动新 Intent 时发出通知。

有没有人有一些建议来让它工作? 提前致谢,

更新:包括相反的信息

与从 C/C++ 代码调用 java 相比,从 java 调用 C 代码非常简单,android ndk 包含几个有用的示例,最简单的是 hello ndk,都可以在 eclipse 中打开,但请注意,您需要先使用 ndk-build 构建 jni 部分。关键部分是正确命名,我遵循 http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/ when i was starting out, Android NDK tutorial/guide for beginners. 还有其他几个入门指南。

关键部分如下

  1. 创建你的javaactivity,你可以根据通知库继承QtActivity。

  2. 加载你的库(Qt 可能会为你处理这一步)去掉前缀 lib 和尾随 .so 所以 libstuff.so 做如下

    // load the library - name matches jni/Android.mk
    static {
       System.loadLibrary("stuff");
    }
    
  3. 从 java 声明你的 C 函数(确保名称与你在 .c 文件中的名称相同,在任何 类

    private native String myCFunction();
    
  4. 在您的 java 代码中的某处调用 myCFunction();

    String something = myCFunction();
    

有一个 Qt 示例可以通过合理的文档完全做到这一点 http://doc.qt.io/qt-5/qtandroidextras-notification-example.html

而不是直接从 Qt 调用 java NFC api,您可能希望在 java 中编写一个包装函数并从您的 C++ 应用程序调用它。您可能还会发现使用结果从 java 调用 C++ 方法更容易,尤其是当 NFC 库没有立即 return 结果时。

Oracle 在其网站上有 JNI 概述和文档 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/intro.html#wp725