管灌系统巡查员智能手机App
zuoxiao
2024-11-13 ee5d78fe671ee2eb5f432ead00e75a266107bc36
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -18,8 +18,10 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import com.dayu.pipirrapp.bean.db.CenterPointBean;
import com.dayu.pipirrapp.bean.db.LatLonBean;
import com.dayu.pipirrapp.bean.db.MarkerBean;
import com.dayu.pipirrapp.bean.net.CenterPointResult;
import com.dayu.pipirrapp.bean.net.MarkerResult;
@@ -33,10 +35,13 @@
import com.dayu.pipirrapp.observer.MapFragmenObserver;
import com.dayu.pipirrapp.service.MyLocationService;
import com.dayu.pipirrapp.utils.CommonData;
import com.dayu.pipirrapp.utils.CommonKeyName;
import com.dayu.pipirrapp.utils.MapJpgUtils;
import com.dayu.pipirrapp.utils.MyLog;
import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
import com.dayu.pipirrapp.utils.ToastUtil;
import com.dayu.pipirrapp.utils.WebViewUtils;
import com.jeremyliao.liveeventbus.LiveEventBus;
import java.io.File;
import java.io.FileInputStream;
@@ -65,34 +70,70 @@
    CenterPointBean centerPointBean;
    String strMarkerJson;
    boolean isStartInspec = false;
    MapFragmenObserver mapFragmenObserver;
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        requireActivity().getLifecycle().addObserver(new MapFragmenObserver());
        Log.i(TAG, "onAttach");
        mapFragmenObserver = new MapFragmenObserver();
        requireActivity().getLifecycle().addObserver(mapFragmenObserver);
    }
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "onCreate");
        isStartInspec = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.isStartInspec, false);
    }
    @Override
    public void onStart() {
        super.onStart();
        //显示巡检状态
        Log.i(TAG, "onStart");
    }
    /**
     * 修改巡检状态
     */
    private void chageInspecState() {
        Intent location = new Intent(this.getActivity(), MyLocationService.class);
        location.putExtra("isSingle", false);
        if (isStartInspec) {
            //获取定位服务传过来的坐标点
            LiveEventBus.get(CommonKeyName.locationData).observeForever(new Observer<Object>() {
                @Override
                public void onChanged(Object o) {
                    LatLonBean latLonBean = (LatLonBean) o;
                    mWebView.evaluateJavascript("javascript:locationOverLay(\"" + latLonBean.getLongitude() + "\",\"" + latLonBean.getLatitude() + "\")", value -> {
                    });
                }
            });
            binding.stateText.setVisibility(View.VISIBLE);
            binding.inspectButton.setText("终");
            //开启定位
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                this.getActivity().startForegroundService(location);
            } else {
                this.getActivity().startService(location);
            }
        } else {
            binding.stateText.setVisibility(View.GONE);
            binding.inspectButton.setText("巡");
            //关闭定位
            this.getActivity().stopService(location);
        }
    }
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        binding = FragmentMapBinding.inflate(inflater, container, false);
        mapFragmenObserver.setmWebView(binding.webView);
        Log.i("MapFragment", "onCreateView");
        mWebView = binding.webView;
        mWebView = WebViewUtils.initWebView(mWebView);
@@ -103,17 +144,19 @@
        initView();
        initLocalData();
        getMarkerData();
        //开启定位
        Intent location = new Intent(this.getActivity(), MyLocationService.class);
        location.putExtra("isSingle", false);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            this.getActivity().startForegroundService(location);
        } else {
            this.getActivity().startService(location);
        }
        //显示巡检状态
        chageInspecState();
        return binding.getRoot();
    }
    /**
     * 初始化各个状态
     */
    private void initState() {
        //开启定位
    }
    /**
     * 初始化本地数据
@@ -121,7 +164,7 @@
    public void initLocalData() {
        centerPointBean = DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().findFirst();
        List<MarkerBean> markerBeans = DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().findAll();
        strMarkerJson = beanToJson(markerBeans);
        strMarkerJson = WebViewUtils.beanToJson(markerBeans);
        jumpCenterPoint();
        setMapMarker();
    }
@@ -133,7 +176,7 @@
    public void jumpCenterPoint() {
        if (centerPointBean != null) {
            Log.d(TAG, "jumpCenterPoint>>>>>>>>>>>>>>>>>>>" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat());
            mWebView.evaluateJavascript("javascript:setCenterAndZoom(\"" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat() + "\")", value -> {
            mWebView.evaluateJavascript("javascript:setCenterAndZoom(\"" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat() + "\",\"" + centerPointBean.getZoomMp() + "\")", value -> {
            });
        }
    }
@@ -177,7 +220,7 @@
                                markerBean.setCountyId(result.getCountyId());
                                markerBeans.add(markerBean);
                            }
                            strMarkerJson = beanToJson(markerBeans);
                            strMarkerJson = WebViewUtils.beanToJson(markerBeans);
                            setMapMarker();
                            DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().deleteAll();
                            // 使用 RxJava 异步插入数据
@@ -199,29 +242,6 @@
            }
        });
    }
    /**
     * bean转json
     *
     * @param markerBeans
     */
    private 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("\"", "\\\"");
    }
@@ -261,29 +281,6 @@
        });
    }
    @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();
        Log.d(TAG, "onDestroy>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        ((ViewGroup) mWebView.getParent()).removeView(mWebView);
        mWebView.destroy(); // 当 Activity 要 destroy 时,应先将 WebView 移除,再 destroy 掉
    }
    void initView() {
        //跳转到指定位置
@@ -295,6 +292,7 @@
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
                String url = request.getUrl().toString();
                Log.i(TAG, "加载地址>>>" + url);
                //判断当前是否为加载瓦片
                if (MapJpgUtils.getInsatance().isTianDiTuTileRequest(url)) {
                    String androidUrl = url.replace(CommonData.webKey, CommonData.androidKey);
@@ -318,6 +316,8 @@
                    }
                    Log.i(TAG, "在线加载>>>" + url);
                }
                return super.shouldInterceptRequest(view, request);
            }
@@ -343,16 +343,10 @@
                // 根据HTTP状态码处理错误
            }
        });
        //巡检按钮
        binding.inspectButton.setOnClickListener(v -> {
            if (!isStartInspec) {
                isStartInspec = true;
                binding.inspectButton.setText("终");
            } else {
                isStartInspec = false;
            }
            binding.stateText.setVisibility(View.VISIBLE);
            isStartInspec = !isStartInspec;
            chageInspecState();
        });
    }
@@ -377,6 +371,7 @@
                    }
                    centerPointBean.setLat(t.getContent().getLat());
                    centerPointBean.setLng(t.getContent().getLng());
                    centerPointBean.setZoomMp(t.getContent().getZoomMp());
                    DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().insert(centerPointBean);
                    jumpCenterPoint();
                } else {
@@ -391,4 +386,5 @@
        binding.bottomLL.setVisibility(View.GONE);
    }
}