管灌系统巡查员智能手机App
zuoxiao
2024-10-15 be9bea2335d4e4617844a1603aa624098c84b2a2
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -1,7 +1,9 @@
package com.dayu.pipirrapp.fragment;
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
@@ -17,9 +19,10 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.bean.db.CenterPointBean;
import com.dayu.pipirrapp.bean.db.MarkerBean;
import com.dayu.pipirrapp.bean.net.CenterPointResult;
import com.dayu.pipirrapp.bean.net.MarkerResult;
import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.databinding.FragmentMapBinding;
import com.dayu.pipirrapp.js.MyWebViewInterface;
@@ -28,6 +31,7 @@
import com.dayu.pipirrapp.net.Constants;
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
import com.dayu.pipirrapp.observer.MapFragmenObserver;
import com.dayu.pipirrapp.service.MyLocationService;
import com.dayu.pipirrapp.utils.CommonData;
import com.dayu.pipirrapp.utils.MapJpgUtils;
import com.dayu.pipirrapp.utils.MyLog;
@@ -37,9 +41,12 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.schedulers.Schedulers;
/**
 * author: zuo
@@ -56,6 +63,8 @@
    WebView mWebView;
    CenterPointBean centerPointBean;
    String strMarkerJson;
    boolean isStartInspec = false;
    @Override
    public void onAttach(@NonNull Context context) {
@@ -66,6 +75,17 @@
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public void onStart() {
        super.onStart();
        //显示巡检状态
        if (isStartInspec) {
            binding.stateText.setVisibility(View.VISIBLE);
        } else {
            binding.stateText.setVisibility(View.GONE);
        }
    }
    @Nullable
@@ -81,18 +101,127 @@
        mWebView.loadUrl("file:///android_asset/index.html");
        getCenterPoint();
        initView();
        initLocalData();
        getMarkerData();
        //开启定位
//        Intent location = new Intent(this.getActivity(), MyLocationService.class);
//        location.putExtra("isSingle", false);
//        this.getActivity().startService(location);
        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);
        }
        return binding.getRoot();
    }
    private void initData() {
        centerPointBean = DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().findFirst();
        if (centerPointBean!=null){
    /**
     * 初始化本地数据
     */
    public void initLocalData() {
        centerPointBean = DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().findFirst();
        List<MarkerBean> markerBeans = DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().findAll();
        strMarkerJson = beanToJson(markerBeans);
        jumpCenterPoint();
        setMapMarker();
    }
    /**
     * 跳转地图中心点
     */
    public void jumpCenterPoint() {
        if (centerPointBean != null) {
            Log.d(TAG, "jumpCenterPoint>>>>>>>>>>>>>>>>>>>" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat());
            mWebView.evaluateJavascript("javascript:setCenterAndZoom(\"" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat() + "\")", value -> {
            });
        }
    }
    /**
     * 添加标注点
     */
    public void setMapMarker() {
        Log.i("mWebView", "addMarker????????????" + strMarkerJson);
        mWebView.evaluateJavascript("javascript:addMarker(\"" + strMarkerJson + "\")", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                Log.i("mWebView", "addMarker!!!!!!!!!" + value);
            }
        });
    }
    /**
     * 获取取水口列表
     */
    private void getMarkerData() {
        ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + ":8085/project/intake/all", MarkerResult.class, null, new SubscriberListener<BaseResponse<MarkerResult>>() {
            @Override
            public void onNext(BaseResponse<MarkerResult> t) {
                if (t.isSuccess()) {
                    if (t.isSuccess()) {
                        if (t.getContent().getObj() != null && !t.getContent().getObj().isEmpty()) {
                            List<MarkerBean> markerBeans = new ArrayList<>();
                            for (int i = 0; i < t.getContent().getObj().size(); i++) {
                                MarkerResult.Obj result = t.getContent().getObj().get(i);
                                //保存数据
                                MarkerBean markerBean = new MarkerBean();
                                markerBean.setLng(result.getLng());
                                markerBean.setLat(result.getLat());
                                markerBean.setBlockId(result.getBlockId());
                                markerBean.setName(result.getName());
                                markerBean.setRemarks(result.getRemarks());
                                markerBean.setTownId(result.getTownId());
                                markerBean.setVillageId(result.getVillageId());
                                markerBean.setCountyId(result.getCountyId());
                                markerBeans.add(markerBean);
                            }
                            strMarkerJson = beanToJson(markerBeans);
                            setMapMarker();
                            DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().deleteAll();
                            // 使用 RxJava 异步插入数据
                            DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll(markerBeans)
                                    .subscribeOn(Schedulers.io()) // 在 IO 线程上执行
                                    .observeOn(AndroidSchedulers.mainThread()) // 在主线程上观察
                                    .subscribe(() -> {
                                        // 插入成功
                                        Log.i("mWebView", "数据插入成功");
                                    }, throwable -> {
                                        // 插入失败
                                        Log.e("mWebView", "数据插入失败: " + throwable.getMessage());
                                    });
                        }
                    }
                } else {
                    ToastUtil.showToast(MapFragment.this.getContext(), t.getMsg());
                }
            }
        });
    }
    /**
     * 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("\"", "\\\"");
    }
@@ -123,7 +252,6 @@
        }
        stringBuilder.append("[116.417854,39.921988,\"235取水口\"]]");
        String jsonData = stringBuilder.toString().replace("\\", "\\\\").replace("\"", "\\\"");
//        String jsonData = "[[116.417854,39.921988,\"235取水口\"],[116.406605,39.921585,\"237取水口\"],[116.412222,39.912345,\"236取水口\"]]";
        Log.i("mWebView", "addMarker????????????" + jsonData);
        mWebView.evaluateJavascript("javascript:addMarker(\"" + jsonData + "\")", new ValueCallback<String>() {
            @Override
@@ -132,7 +260,6 @@
            }
        });
    }
    @Override
    public void onResume() {
@@ -152,6 +279,7 @@
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        ((ViewGroup) mWebView.getParent()).removeView(mWebView);
        mWebView.destroy(); // 当 Activity 要 destroy 时,应先将 WebView 移除,再 destroy 掉
    }
@@ -215,6 +343,17 @@
                // 根据HTTP状态码处理错误
            }
        });
        binding.inspectButton.setOnClickListener(v -> {
            if (!isStartInspec) {
                isStartInspec = true;
                binding.inspectButton.setText("终");
            } else {
                isStartInspec = false;
            }
            binding.stateText.setVisibility(View.VISIBLE);
        });
    }
@@ -228,10 +367,8 @@
     * 获取地图中心点
     */
    private void getCenterPoint() {
        Map<String, Object> data = new HashMap<>();
        data.put("token", MyApplication.myApplication.token);
        ApiManager.getInstance().requestGet(this.getContext(), Constants.SUCCESS + "8080/base/dict_item/map_center", CenterPointResult.class, data, new SubscriberListener<BaseResponse<CenterPointResult>>() {
        ApiManager.getInstance().requestGet(this.getContext(), Constants.BASE_URL + ":8080/base/dict_item/map_center", CenterPointResult.class, null, new SubscriberListener<BaseResponse<CenterPointResult>>() {
            @Override
            public void onNext(BaseResponse<CenterPointResult> t) {
                if (t.isSuccess()) {
@@ -240,7 +377,8 @@
                    }
                    centerPointBean.setLat(t.getContent().getLat());
                    centerPointBean.setLng(t.getContent().getLng());
                    DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().update(centerPointBean);
                    DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().insert(centerPointBean);
                    jumpCenterPoint();
                } else {
                    ToastUtil.showToast(MapFragment.this.getContext(), t.getMsg());
                }