package com.dayu.pipirrapp.utils;
|
|
import android.util.Log;
|
import android.webkit.ConsoleMessage;
|
import android.webkit.JsResult;
|
import android.webkit.WebChromeClient;
|
import android.webkit.WebSettings;
|
import android.webkit.WebView;
|
|
import com.dayu.pipirrapp.bean.db.MarkerBean;
|
|
import java.util.List;
|
|
/**
|
* author: zuo
|
* Date: 2024-09-03
|
* Time: 15:43
|
* 备注:web相关的公共方法
|
*/
|
public class WebViewUtils {
|
private static String TAG = "WebViewUtils";
|
|
|
/**
|
* 初始化web设置
|
*
|
* @param mWebView
|
* @return
|
*/
|
public static WebView initWebView(WebView mWebView) {
|
|
// getActivity().getWindow().setFlags(
|
// WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
|
// WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
|
// WebView 配置
|
WebSettings webSettings = mWebView.getSettings();
|
// 生命周期
|
// 前进后退
|
if (mWebView.canGoBack()) {
|
mWebView.goBack();
|
}
|
if (mWebView.canGoForward()) {
|
mWebView.goForward();
|
}
|
|
// 缓存相关
|
mWebView.clearCache(false); // 清除缓存
|
// mWebView.clearHistory(); // 清除历史
|
// mWebView.clearFormData(); // 清除表单数据
|
|
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);// 设置缓存模式
|
webSettings.setDatabaseEnabled(true);
|
webSettings.setDomStorageEnabled(true);//开启DOM缓存,关闭的话H5自身的一些操作是无效的
|
//启用 Service Workers
|
WebView.enableSlowWholeDocumentDraw();
|
WebView.setWebContentsDebuggingEnabled(true);
|
|
// 缓存模式
|
// LOAD_DEFAULT: 默认,根据 cache-control 决定是否从网络上取数据
|
// LOAD_NORMAL: API level 17 中已经废弃, 从API level 11开始作用同 LOAD_DEFAULT 模式
|
// LOAD_CACHE_ELSE_NETWORK: 只要本地有,无论是否过期,或者 no-cache,都使用缓存中的数据
|
// LOAD_NO_CACHE: 不使用缓存,只从网络获取数据
|
// LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
|
// js 相关
|
webSettings.setJavaScriptEnabled(true); // 支持 js。如果碰到后台无法释放 js 导致耗电,应在 onStop 和 onResume 里分别设成 false 和 true
|
// mWebView.addJavascriptInterface(new WebAppInterface(this), "android"); // js 接口
|
|
// webSettings.setPluginsEnabled(true); // 支持插件
|
// 设置自适应屏幕,两者合用
|
webSettings.setUseWideViewPort(true); // 将图片调整到适合 WebView 的大小
|
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
|
// 缩放操作
|
webSettings.setSupportZoom(true); // 支持缩放,默认为 true
|
webSettings.setBuiltInZoomControls(true); // 设置内置的缩放控件,若为 false,则该 WebView 不可缩放
|
webSettings.setDisplayZoomControls(false); // 隐藏原生的缩放控件
|
webSettings.setLoadsImagesAutomatically(true);//预加载
|
//添加访问权限
|
webSettings.setAllowFileAccess(true);
|
webSettings.setAllowFileAccessFromFileURLs(true);
|
webSettings.setAllowUniversalAccessFromFileURLs(true);
|
|
//webView弹JsAlert
|
mWebView.setWebChromeClient(new WebChromeClient() {
|
@Override
|
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
|
return super.onJsAlert(view, url, message, result);
|
}
|
|
@Override
|
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
|
Log.d("WebView", consoleMessage.message()
|
+ " -- From line "
|
+ consoleMessage.lineNumber() + " of "
|
+ consoleMessage.sourceId());
|
return true;
|
}
|
});
|
|
|
return mWebView;
|
}
|
|
/**
|
* bean转json
|
*
|
* @param markerBeans
|
*/
|
public static String beanToJson(List<MarkerBean> markerBeans) {
|
StringBuilder stringBuilder = new StringBuilder();
|
stringBuilder.append("[");
|
for (int i = 0; i < markerBeans.size(); i++) {
|
MarkerBean markerBean = markerBeans.get(i);
|
stringBuilder.append("[");
|
stringBuilder.append(markerBean.getLng());
|
stringBuilder.append(",");
|
stringBuilder.append(markerBean.getLat());
|
stringBuilder.append(",\"" + markerBean.getName() + "\"]");
|
if (i != markerBeans.size() - 1) {
|
stringBuilder.append(",");
|
}
|
}
|
stringBuilder.append("]");
|
return stringBuilder.toString().replace("\\", "\\\\").replace("\"", "\\\"");
|
}
|
|
/**
|
* bean转json
|
*
|
* @param stringBuilder
|
* @param markerBean
|
*/
|
public static String markerBeanToJson(StringBuilder stringBuilder, MarkerBean markerBean) {
|
stringBuilder.append("{");
|
stringBuilder.append(markerBean.getLng());
|
stringBuilder.append(",");
|
stringBuilder.append(markerBean.getLat());
|
stringBuilder.append(",\"" + markerBean.getName() + "\"}");
|
return stringBuilder.toString().replace("\\", "\\\\").replace("\"", "\\\"");
|
}
|
}
|