Android WebViewCompat的示例用法

Android WebViewCompat的示例用法,android,webview,androidx,Android,Webview,Androidx,无意中,我发现有一个WebView支持库是AndroidX:AndroidX.webkit:webkit:1.0.0的一部分 但是,我找不到任何关于如何使用它的示例代码,JavaDoc也没有多少帮助: 这应该是开发人员使用的还是内部库?此库是WebKit的androidx抽象(因为它依赖于可更新的APK) 它本身告诉“不要实例化它”(而且XML标记是未知的,因此必须使用android.webkit.WebView);但是类有几个公共静态方法,这些方法是可访问的;也似乎相关(IDE抱怨) 使用这些

无意中,我发现有一个WebView支持库是AndroidX:AndroidX.webkit:webkit:1.0.0的一部分

但是,我找不到任何关于如何使用它的示例代码,JavaDoc也没有多少帮助:


这应该是开发人员使用的还是内部库?

此库是
WebKit
androidx
抽象(因为它依赖于可更新的APK)

它本身告诉“不要实例化它”(而且XML标记是未知的,因此必须使用
android.webkit.WebView
);但是类有几个
公共静态
方法,这些方法是可访问的;也似乎相关(IDE抱怨)

使用这些导入时:

import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;

import androidx.annotation.NonNull;

import androidx.webkit.SafeBrowsingResponseCompat;
import androidx.webkit.WebResourceErrorCompat;
import androidx.webkit.WebViewClientCompat;
import androidx.webkit.WebViewFeature;
import androidx.webkit.WebViewCompat;
使用类似这样的工具:

private WebView mWebView;

...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

    this.mWebView.setWebViewClient(new WebViewClientCompat(){

        @Override
        public void onPageCommitVisible(@NonNull WebView view, @NonNull String url) {
            super.onPageCommitVisible(view, url);
        }

        @Override
        public void onReceivedError(@NonNull WebView view, @NonNull WebResourceRequest request, @NonNull WebResourceErrorCompat error) {
            super.onReceivedError(view, request, error);
        }

        @Override
        public void onReceivedHttpError(@NonNull WebView view, @NonNull WebResourceRequest request, @NonNull WebResourceResponse errorResponse) {
            super.onReceivedHttpError(view, request, errorResponse);
        }

        @Override
        public void onSafeBrowsingHit(@NonNull WebView view, @NonNull WebResourceRequest request, int threatType, @NonNull SafeBrowsingResponseCompat callback) {
            super.onSafeBrowsingHit(view, request, threatType, callback);
        }

        @Override
        public boolean shouldOverrideUrlLoading(@NonNull WebView view, @NonNull WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);
        }
    });
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && WebViewFeature.isFeatureSupported(WebViewFeature.VISUAL_STATE_CALLBACK)) {
    final int mVisualStateCallbackId = 500;
    WebViewCompat.postVisualStateCallback(mWebView, mVisualStateCallbackId, new WebViewCompat.VisualStateCallback() {
        @Override
        public void onComplete(long requestId) {
            if (requestId == mVisualStateCallbackId) {
                mWebView.setVisibility(View.VISIBLE);
            }
        }
    });
}
实现
接口
与此类似:

private WebView mWebView;

...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

    this.mWebView.setWebViewClient(new WebViewClientCompat(){

        @Override
        public void onPageCommitVisible(@NonNull WebView view, @NonNull String url) {
            super.onPageCommitVisible(view, url);
        }

        @Override
        public void onReceivedError(@NonNull WebView view, @NonNull WebResourceRequest request, @NonNull WebResourceErrorCompat error) {
            super.onReceivedError(view, request, error);
        }

        @Override
        public void onReceivedHttpError(@NonNull WebView view, @NonNull WebResourceRequest request, @NonNull WebResourceResponse errorResponse) {
            super.onReceivedHttpError(view, request, errorResponse);
        }

        @Override
        public void onSafeBrowsingHit(@NonNull WebView view, @NonNull WebResourceRequest request, int threatType, @NonNull SafeBrowsingResponseCompat callback) {
            super.onSafeBrowsingHit(view, request, threatType, callback);
        }

        @Override
        public boolean shouldOverrideUrlLoading(@NonNull WebView view, @NonNull WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);
        }
    });
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && WebViewFeature.isFeatureSupported(WebViewFeature.VISUAL_STATE_CALLBACK)) {
    final int mVisualStateCallbackId = 500;
    WebViewCompat.postVisualStateCallback(mWebView, mVisualStateCallbackId, new WebViewCompat.VisualStateCallback() {
        @Override
        public void onComplete(long requestId) {
            if (requestId == mVisualStateCallbackId) {
                mWebView.setVisibility(View.VISIBLE);
            }
        }
    });
}

我也不知道,但我最好的猜测是它在所有平台上都提供了一致的javascript实现。在2018年Android开发峰会上找到了一段视频,解释了Android X中新的WebViewCompat:但它没有包含有用的代码示例:(你知道这样做的好处吗?@TomTasche如前所述:
它依赖于可更新的APK
,而不是框架的
WebKit
实现。name
Compat
几乎总是意味着它是一个抽象……因此
接口
方法看起来很像,但使用的引擎可能是另一个。
WebViewFeature.isFeatureSupported()
还提供了不同实现的提示…移植到WebViewCompat似乎是浪费时间。