首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过QAndroidJniObject在Qt C++中使用原生android webview

如何通过QAndroidJniObject在Qt C++中使用原生android webview
EN

Stack Overflow用户
提问于 2017-09-21 09:32:30
回答 1查看 1.2K关注 0票数 14

我想在我的qml应用程序中使用Android WebView。提供的默认WebView对象使用本机呈现,但缺少几个功能(例如,拦截网络请求并阻止它们的功能)。我知道Qt允许您使用QAndroidJniObject调用原生Java API。有没有可能用它来为原生Android WebView创建一个Qt包装器?如果是,我如何实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-04-25 06:56:59

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

代码语言:javascript
复制
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中动态编译代码:

代码语言:javascript
复制
String source = ...;
int result = com.sun.tools.javac.Main.compile(new String[]{source});  // parameter is an array

在Qt C++中,它为我们提供了以下内容:

代码语言:javascript
复制
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视图客户端并使用它:

代码语言:javascript
复制
QAndroidJniObject myWebViewClient{"SuperDuperUniqueNameForMyWebViewClient"};

对这一切持保留态度,因为它来自我的头顶,我还没有测试过它。不过,至少它应该会把你推向正确的方向。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46334022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档