如何使用 QAndroidJniObject 从 Java 调用 Intent

Posted

技术标签:

【中文标题】如何使用 QAndroidJniObject 从 Java 调用 Intent【英文标题】:How to use QAndroidJniObject to call a Intent from Java 【发布时间】:2015-02-19 15:37:32 【问题描述】: 我想在我的 android 应用中使用 rtl_tcp 驱动程序从 USB 电视调谐器读取原始数据。 我找到了这个源代码https://github.com/martinmarinov/rtl_tcp_andro-,这个家伙在google play有一个应用程序作为驱动程序,任何人都可以调用这个应用程序并可以通过tcp端口读取原始数据。 这是应用程序https://play.google.com/store/apps/details?id=marto.rtl_tcp_andro&hl=en

现在,我想从我的应用程序中调用这个驱动程序,但我使用的是 QT。我找到了类 QAndroidJNIObject 来调用 java 代码。 我还在 github.com/demantz/RFAnalyzer/blob/master/app/src/main/java/com/mantz_it/rfanalyzer/MainActivity.java 找到了一个 java 示例。

try  
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("iqsrc://-a 127.0.0.1 -p 1234 -n 1"));
    startActivityForResult(intent, RTL2832U_RESULT_CODE); 

catch (ActivityNotFoundException e) 

    Log.e(LOGTAG, "createSource: RTL2832U is not installed");
    ...

但是我无法找到一种方法来用 C++/Qt 编写正确的代码来像 Java 中的示例一样进行相等的调用。我不确定这个 java 代码是否正确或遗漏了什么。

有人可以帮助我吗?

我还想问一下我是否可以通过 Qt 代码与 anet.h 库建立 tcp 连接?

【问题讨论】:

格式化和缩进你的代码。使用 Ctrl+K 进行代码格式化,而不是 ``. 【参考方案1】:

您需要使用QJniAndroidObject 类来创建JNI 对象并对其进行操作。这并不总是显而易见的,但它最终会起作用。您的 9 行 Java 很可能最终成为 50 行 C++ 代码。我建议您逐行转码并始终检查对象是否有效(QJniAndroidObject::isValid())。

以下是创建Intent 并启动活动的示例: startActivity on Qt, nothing displays

如果失败,请尝试编写一些代码并发布另一个 SO 问题(创建和操作 QJniAndroidObject 的语法对于不熟悉 Java 的 C++ 开发人员来说并不总是显而易见的)。

【讨论】:

以上是关于如何使用 QAndroidJniObject 从 Java 调用 Intent的主要内容,如果未能解决你的问题,请参考以下文章

Qt 和 Android Gallery - 使用 QAndroidJniObject 的 MediaStore

QAndroidJniObject::callMethod() 和 QAndroidJniObject::callObjectMethod() 有啥区别?

无法使用 QAndroidJniObject 调用 PowerManager.WakeLock.newWakeLock

操作 QAndroidJniObject 数组

如何从 Qt Android 使手机振动

当我使用Qt Android Extras C ++ Classes时,如何防止Windows上的错误