管灌系统巡查员智能手机App
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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("\"", "\\\"");
    }
}