如何使用 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() 有啥区别?