使用Qt在Android上实现NFC

NFC implementation on Android using Qt

本文关键字:实现 NFC Android Qt 使用      更新时间:2023-10-16

我正在尝试使用Qt从Android上的nfc卡读取UID。a一方面,经过一番研究,我在Java中找到了这个类供阅读。另一方面,我已经阅读了Qt文档如何使用QAndroidJniObject::callStaticObjectMethod从Java调用和静态对象,但我不知道如何使用Qt的模块AndroidExtras创建活动,并在启动新意图时通知它。

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

更新:包含相反

的信息

与从 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/Android NDK初学者教程/指南。还有其他几个入门指南。

关键部分如下

  1. 创建您的Java活动,您可以根据通知库继承QtActivity。

  2. 加载您的库(Qt 可能会为您处理此步骤)省略前面的库和尾随的 .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库没有立即返回结果的情况下。

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