|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WebView mWebView; | 
|---|
|  |  |  | CenterPointBean centerPointBean; | 
|---|
|  |  |  | String strMarkerJson; | 
|---|
|  |  |  | boolean isStartInspec = false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onAttach(@NonNull Context context) { | 
|---|
|  |  |  | 
|---|
|  |  |  | @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 | 
|---|
|  |  |  | 
|---|
|  |  |  | 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("\"", "\\\""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onResume() { | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onDestroy() { | 
|---|
|  |  |  | super.onDestroy(); | 
|---|
|  |  |  | Log.d(TAG, "onDestroy>>>>>>>>>>>>>>>>>>>>>>>>>>>"); | 
|---|
|  |  |  | ((ViewGroup) mWebView.getParent()).removeView(mWebView); | 
|---|
|  |  |  | mWebView.destroy(); // 当 Activity 要 destroy 时,应先将 WebView 移除,再 destroy 掉 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 根据HTTP状态码处理错误 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | binding.inspectButton.setOnClickListener(v -> { | 
|---|
|  |  |  | if (!isStartInspec) { | 
|---|
|  |  |  | isStartInspec = true; | 
|---|
|  |  |  | binding.inspectButton.setText("终"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | isStartInspec = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | binding.stateText.setVisibility(View.VISIBLE); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | * 获取地图中心点 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 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()) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | } | 
|---|