【问题标题】:NFC implementation on Android using Qt使用 Qt 在 Android 上实现 NFC
【发布时间】:2015-05-12 15:18:15
【问题描述】:

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

有人有什么建议可以让它发挥作用吗? 提前致谢,

【问题讨论】:

    标签: java android c++ qt nfc


    【解决方案1】:

    更新:包括相反的信息

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

    关键部分如下

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

    2. 加载您的库(Qt 可能会为您处理此步骤)离开 preciding 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 库没有立即返回结果的情况下。

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

    【讨论】:

    • 感谢您的回复!我已经检查了那个例子。我发现的问题是这个例子展示了如何将 C++ 信号绑定到 Java 插槽。对于 NFC,我们需要的正好相反。关于您评论的最后一部分,我计划从检测到新卡时调用的函数 'ByteArrayToHexString(byte [] inarray)' 中读取 uid ...唯一缺少的部分是如何实现一种“onByteArrayToHexString”函数。
    • 给你一些更好的链接和另一种方式的描述,不幸的是我不在工作atm,不能轻易地仔细检查我的代码
    • 非常感谢您的详细更新。我要安装android studio并试一试。我还发现了这篇文章 (gnuton.org/blog/2014/01/…),其中解释了如何编译 Java 代码以在 C++ 端使用。
    • 根据我们的经验,Android Studio 仍然不能很好地处理 NDK,eclipse 可能会做得更好
    • 我还没有达到,但我已将您的答案标记为好,因为您指出了一些重要的概念。非常感谢!
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2015-12-10
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多