java - 如何使用 QAndroidJniObject 在 Qt C++ 中使用原生 android webview

标签 java android c++ qt webview

我想在我的 qml 应用程序中使用 Android WebView。提供的默认 WebView 对象使用 native 呈现,但缺少一些功能(例如拦截网络请求并阻止它们的能力)。我知道 Qt 允许您使用 QAndroidJniObject 调用 native Java API。是否可以使用它围绕原生 Android WebView 创建 Qt 包装器?如果是,我该如何实现?

最佳答案

这很棘手。您基本上需要在运行时创建一个覆盖 shouldInterceptRequest 的新类:

public class SuperDuperUniqueNameForMyWebViewClient extends android.webkit.WebViewClient {
    // constructor etc...
    @Override
    public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView view, android.webkit.WebResourceRequest request) {
        // implement your logic here
    }
}

要动态创建类,您必须在 Java 中即时编译代码:

String source = ...;
int result = com.sun.tools.javac.Main.compile(new String[]{source});  // parameter is an array

Qt C++ 中的内容为我们提供了这个:

QString source = ...;  // Here you need to provide the Java code for your class
QAndroidJniObject sourceObject = QAndroidJniObject::fromString(source);
jobjectArray sourceObjectArray = sourceObject.object<jobjectArray>();  // this is probably not correct
jint result = QAndroidJniObject::callStaticMethod<jint>("com/sun/tools/javac/Main",
                                                       "compile"
                                                       "([Ljava/lang/String;)I",
                                                       jobjectArray);

之后,您应该可以使用自己的类创建 Web View 客户端并使用它:

QAndroidJniObject myWebViewClient{"SuperDuperUniqueNameForMyWebViewClient"};

对所有这些都持保留态度,因为它来 self 的头顶,我还没有测试过。不过,至少它应该将你推向正确的方向。

关于java - 如何使用 QAndroidJniObject 在 Qt C++ 中使用原生 android webview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46334022/

相关文章:

java - 如何通过管道将输入输入到 java 程序中,但该输入仍然显示在输出中?

android - 目标 API 和 minSDK 的目的是什么

c++ - C# 开发者关于 C++ 的一些问题

java - 使用 Jsoup 计算 google 结果

java - hibernate 条件 : adding additional restriction to Restrictions. isEmpty

java - 是否可以获得包含类(CDI)的引用?

c++ - 使用运算符比较两个计时时间点

android - ubuntu升级到14.04 TLS后eclipse Juno经常自动关闭

java - While 循环和黑屏

c++ - 当一个 xvalue 绑定(bind)到一个 const 左值引用时,它的生命周期是否会延长?