管灌系统巡查员智能手机App
zuoxiao
2024-01-23 4b6cb6d2a0e48640cfd86ef00eb0ff5f4cddf5a2
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package com.dayu.pipirrapp.fragment;
 
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
 
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
 
import com.dayu.pipirrapp.databinding.FragmentMapBinding;
import com.dayu.pipirrapp.js.MyWebViewInterface;
import com.dayu.pipirrapp.observer.MapFragmenObserver;
import com.dayu.pipirrapp.service.MyLocationService;
import com.dayu.pipirrapp.utils.ToastUtil;
 
import java.util.List;
 
/**
 * author: zuo
 * Date: 2023/12/20
 * Time: 10:16
 * 备注:地图页
 */
public class MapFragment extends BaseFragment {
 
    FragmentMapBinding binding;
    LocationManager locationManager;
 
    WebView mWebView;
 
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        requireActivity().getLifecycle().addObserver(new MapFragmenObserver());
    }
 
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
 
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
 
        binding = FragmentMapBinding.inflate(inflater, container, false);
        Log.i("MapFragment", "onCreateView");
        mWebView = binding.webView;
        initWebView();
        mWebView.loadUrl("http://192.168.3.178:3000/");
        initView();
        //开启定位
        Intent location = new Intent(this.getActivity(), MyLocationService.class);
        location.putExtra("isSingle", false);
        this.getActivity().startService(location);
        return binding.getRoot();
    }
 
 
    @Override
    public void onResume() {
        super.onResume();
        mWebView.onResume(); // 恢复 WebView,能正常执行网页的响应
 
    }
 
    @Override
    public void onPause() {
        super.onPause();
        mWebView.onPause(); // 通过 onPause 动作通知内核暂停所有的动作,如 DOM 的解析、plugin 的执行、JavaScript 执行等
    }
 
    @Override
    public void onDestroy() {
        super.onDestroy();
        ((ViewGroup) mWebView.getParent()).removeView(mWebView);
        mWebView.destroy(); // 当 Activity 要 destroy 时,应先将 WebView 移除,再 destroy 掉
    }
 
    void initWebView() {
//        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自身的一些操作是无效的
// 缓存模式
//        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);//预加载
        //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);
            }
        });
        MyWebViewInterface myWebViewInterface=new MyWebViewInterface(this);
        mWebView.addJavascriptInterface(myWebViewInterface,"Android");
    }
 
    void initView() {
        binding.flyBtn.setOnClickListener(v -> {
            mWebView.evaluateJavascript("javascript:locationOverLay(116.399565,39.89432)", value -> {
            });
        });
    }
 
 
    public void showWaterIntakeDetail(String data){
        binding.bottomLL.setVisibility(View.VISIBLE);
    }
 
 
 
    public void closeWaterIntakeDetail(){
        binding.bottomLL.setVisibility(View.GONE);
    }
 
}