gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:02:26 25 4
gpt4 key购买 nike

我想在我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com