偶然、AndroidXの一部であるWebViewのサポートライブラリがあることを発見しました:androidx.webkit:webkit:1.0.0
しかし、それを使用する方法に関するサンプルコードを見つけることができず、JavaDocもあまり役に立ちません: https://developer.Android.com/reference/androidx/webkit/package-summary
これは開発者が使用することになっていますか、それとも内部ライブラリですか?
このライブラリはandroidx
のWebKit
抽象化です(更新可能なAPKに依存しているため)。
WebViewCompat.Java 自体は「これをインスタンス化しないでください」と伝えます(XMLタグも不明なので、Android.webkit.WebView
を使用する必要があります);しかし、クラス WebViewCompat には、アクセス可能ないくつかのpublic static
メソッドがあります。また WebViewFeature は関連があるようです(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;
WebViewClientCompat を使用すると、次のように機能します。
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);
}
});
}
interface
の実装 WebViewCompat.VisualStateCallback は次のように機能します。
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);
}
}
});
}