| | |
| | | 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()); |
| | | } |