Android WebView目标29未显示内容

Android WebView目标29未显示内容,android,webview,android-10.0,Android,Webview,Android 10.0,我有一个应用程序具有此最新声明: compileSdkVersion 29 buildToolsVersion '29.0.2' useLibrary 'org.apache.http.legacy' defaultConfig { minSdkVersion 19 targetSdkVersion 29 ... 而且我在应用程序中也有一些WebViews-全尺寸Activity,Fragment版本,还有一个固定大小的广告(比如300x300dp,水平居中)视图,与

我有一个应用程序具有此最新声明:

compileSdkVersion 29
buildToolsVersion '29.0.2'
useLibrary 'org.apache.http.legacy'

defaultConfig {
    minSdkVersion 19
    targetSdkVersion 29
    ...
而且我在应用程序中也有一些
WebView
s-全尺寸
Activity
Fragment
版本,还有一个固定大小的广告(比如300x300dp,水平居中)
视图
,与本机小部件一起放在列表上。目标更新后,最后一个不再加载(只有这一个,所有其他都在工作),但当我在线更改(还原)时:

    targetSdkVersion 28
它与更新前一样工作。此广告的整个
WebView
设置如下所示:

webView = findViewById(R.id.ad_banner_webview);
webView.setLayerType(Build.VERSION.SDK_INT <= 19 ?
            WebView.LAYER_TYPE_SOFTWARE : // on older devices non-fullactivity webview is blinking/glitching
            WebView.LAYER_TYPE_HARDWARE, null);
webView.setBackgroundColor(Color.TRANSPARENT);
final String userAgent = AppInfo.getInstance(webView.getContext()).getUserAgent();
webView.getSettings().setUserAgentString(userAgent);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setTextZoom(100);
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new CustomWebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        if (!isDummy)
            webViewContainer.setTag(System.currentTimeMillis());
    }
});

//disabling long touch - text not selectable
webView.setOnLongClickListener(v -> true);
webView.setLongClickable(false);
webView.setHapticFeedbackEnabled(false);
webView=findViewById(R.id.ad\u banner\u webView);
setLayerType(Build.VERSION.SDK_INT true);
webView.setLongClickable(false);
webView.setHapticFeedbackEnabled(false);
请注意,在API 19(支持的最低版本)上,
webView
已调用了
setLayerType(webView.LAYER\u TYPE\u软件)
并始终工作,无论目标是什么

问题很简单:这种行为的原因是什么?如何解决


我在查看目标更新后可能会改变我的应用程序行为的内容,但没有关于
WebView
的消息。此外,我还发现了一些关于通过
WebView
-进行渲染时所做更改的隐藏信息,但仍然不知道这些信息是否相关-我没有任何带有任何线索的特殊日志/输出,从5.0到10都存在问题,在这些问题上,我使用的是
层类型硬件

加载内容的方式非常重要。。。我们在
WebView
中有
loadUrl
loadData
loadDataWithBaseURL
方法,这三种方法都以非常不同的方式处理给定的输入数据

在我的例子中,有问题的是
loadData
,代码如下:

<body style="margin: 0; padding: 0"><div class='banner-wrap'>        
<iframe class='html5-iframe' src='https://example.com/html5/123.html#https://example-ads.com/deliver/ad.php?param=123__destination=https%3A%2F%2Fwww.anothersite.com%2F' width='300' height='300'>
</iframe>    
<a href='https://example.com/html5/123.html#https://example-ads.com/deliver/ad.php?param=123__destination=https%3A%2F%2Fwww.anothersite.com%2F' target='_blank'>
</a>    
</div></body>
我在更新SDK 29版本时遇到了相同的问题。我更改了代码,它正在为SDK版本29工作


非常感谢这个解决方案,伙计!我已经支持这件事很久了。谢谢你的解决方案!所以你加载了Base64版本?这是怎么回事?我想您不想在webView中显示base64字符串吧?我尝试了这个方法,结果是整个文本都被编码了:SHTML数据是用Base64编码的,但是
webView.loadData(
方法是在最后一个attr中确定
“Base64”
。对于me@snachmsm太棒了,非常感谢你。
String base64version = Base64.encodeToString(htmlData.getBytes(), Base64.DEFAULT);
webView.loadData(base64version, "text/html; charset=UTF-8", "base64");
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    WebViewClientImpl webViewClient = new WebViewClientImpl(this);
    webView.setWebViewClient(webViewClient);
    webView.setWebChromeClient(new WebChromeClient());
    webView.loadDataWithBaseURL(null,html_content,"text/html","UTF-8",null);