public abstract class BaseWebActivity extends BaseActivity {
protected AgentWeb mAgentWeb;
/*================== 生命周期绑定 ==================*/
@Override
protected void onPause() {
if (mAgentWeb != null) {
mAgentWeb.getWebLifeCycle().onPause();
}
super.onPause();
}
@Override
protected void onResume() {
if (mAgentWeb != null) {
mAgentWeb.getWebLifeCycle().onResume();
}
super.onResume();
}
@Override
protected void onDestroy() {
if (mAgentWeb != null) {
mAgentWeb.getWebLifeCycle().onDestroy();
}
super.onDestroy();
}
/*================== 初始化配置webView ==================*/
protected void createWebViewProxy() {
mAgentWeb = AgentWeb.with(this)
.setAgentWebParent(setWebViewParent(), new ViewGroup.LayoutParams(-1, -1))
.closeIndicator()
.setWebViewClient(initWebViewClient())
.setWebChromeClient(initWebChromeClient())
.setWebView(createWebView())
.setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) //严格模式 Android 4.2.2 以下会放弃注入对象 ,使用AgentWebView没影响。
.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//打开其他应用时,弹窗咨询用户是否前往其他应用
.interceptUnkownUrl() //拦截找不到相关页面的Url AgentWeb 3.0.0 加入。
.createAgentWeb()
.ready()
.go(null);
}
protected WebView createWebView() {
WebView webView = new WebView(getApplicationContext());
// 设置背景颜色 透明
webView.setBackgroundColor(Color.argb(0, 0, 0, 0));
// 初始化setting
initWebSettings(webView.getSettings());
// 设置本地调用对象及其接口
Object javaScriptObject = initJavaScriptObject();
if (javaScriptObject != null) {
webView.addJavascriptInterface(initJavaScriptObject(), initJavaScriptName());
}
return webView;
}
protected abstract ViewGroup setWebViewParent();
/**
* js与Android交互名
*/
protected String initJavaScriptName() {
return "android";
}
/**
* js交互对象
*/
protected Object initJavaScriptObject() {
return null;
}
/**
* 初始化WebSettings
*/
protected void initWebSettings(WebSettings settings) {
settings.setDefaultTextEncodingName("utf-8");
//支持jsadb
settings.setJavaScriptEnabled(true);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
// 设置可以支持缩放
settings.setSupportZoom(true);
//扩大比例的缩放
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
}
/**
* 初始化WebChromeClient
*/
protected WebChromeClient initWebChromeClient() {
return new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
};
}
/**
* 初始化WebViewClient
*/
protected WebViewClient initWebViewClient() {
return new WebViewClient() {
boolean isLoadUrl = false;
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (!isLoadUrl) {
isLoadUrl = true;
view.loadUrl(url);
}
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webClearHistory();
}
};
}
网友评论