腾讯x5webview sdk : x5.tencent.com/docs/access…
package com.win.project.widget;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
import com.blankj.utilcode.util.LogUtils;
import com.tencent.smtt.export.external.interfaces.SslError;
import com.tencent.smtt.export.external.interfaces.SslErrorHandler;
import com.tencent.smtt.sdk.CookieSyncManager;
import com.tencent.smtt.sdk.DownloadListener;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;
public class X5WebView extends WebView {
private WebViewClient client = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
//todo : 这里可以做一些广告拦截 判断url并加拦截规则 true 拦截该url false 不拦截
return false;
}
@Override
public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
sslErrorHandler.proceed();//接受信任所有网站的证书
super.onReceivedSslError(webView, sslErrorHandler, sslError);
}
};
private WebChromeClient chromeClient = new WebChromeClient() {
};
@SuppressLint("SetJavaScriptEnabled")
public X5WebView(Context context, AttributeSet arg1) {
super(context, arg1);
setWebViewClient(client);
setWebChromeClient(chromeClient);
initWebViewSettings(context);
getView().setClickable(true);
getView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
}
private void initWebViewSettings(final Context context) {
WebSettings webSetting = this.getSettings();
webSetting.setDefaultTextEncodingName("UTF-8");
webSetting.setJavaScriptEnabled(true);
webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
webSetting.setAllowFileAccess(true);
webSetting.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
webSetting.setSupportZoom(true);
webSetting.setAllowUniversalAccessFromFileURLs(true);
webSetting.setAllowFileAccess(true);
webSetting.setAllowFileAccessFromFileURLs(true);
webSetting.setBuiltInZoomControls(true);
webSetting.setUseWideViewPort(true);
webSetting.setSupportMultipleWindows(false);
webSetting.setAppCacheEnabled(false);
webSetting.setDomStorageEnabled(true);
webSetting.setGeolocationEnabled(true);
webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
webSetting.setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
webSetting.setAppCachePath(context.getDir("appcache", 0).getPath());
webSetting.setDatabasePath(context.getDir("databases", 0).getPath());
webSetting.setGeolocationDatabasePath(context.getDir("geolocation", 0).getPath());
// 关于是否缩放
webSetting.setDisplayZoomControls(false);
webSetting.setLoadsImagesAutomatically(true); //支持自动加载图片
webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
if (Build.VERSION.SDK_INT >= 21) {
webSetting.setMixedContentMode(android.webkit.WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
// 监听下载功能,当用户点击下载链接的时候,直接调用系统的浏览器来下载
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(intent);
}
});
if (getX5WebViewExtension() != null) {
Bundle data = new Bundle();
data.putBoolean("standardFullScreen", false);// true表示标准全屏,false表示X5全屏;不设置默认false,
data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true,
data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1
getX5WebViewExtension().invokeMiscMethod("setVideoParams", data);
}
CookieSyncManager.createInstance(context);
CookieSyncManager.getInstance().sync();
}
@SuppressLint("SetJavaScriptEnabled")
public X5WebView(Context arg0) {
this(arg0, null);
}
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if (keyCode == KeyEvent.KEYCODE_BACK && canGoBack()) {
// goBack();
// return true;
// }
// return super.onKeyDown(keyCode, event);
// }
}