From 4230457ee9edca6af738ec3f832ed0f49d0d99c3 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期三, 04 十二月 2024 18:10:30 +0800 Subject: [PATCH] 1.下载地图瓦片判断是否有网。 2.没有上传成功的巡检坐标有网时重新上传。 3.添加网络判断的工具类 --- app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java | 11 + app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java | 2 app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java | 90 +++------- app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java | 2 app/src/main/assets/js/map.js | 69 +++++-- app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java | 109 +++++++++++ app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java | 12 app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java | 9 app/src/main/java/com/dayu/pipirrapp/bean/net/InsectionResult.java | 12 app/src/main/res/layout/activity_login.xml | 4 app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java | 2 app/src/main/java/com/dayu/pipirrapp/utils/NetUtils.java | 80 ++++++++ app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java | 55 +++++ app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java | 25 ++ app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java | 42 +++- app/src/main/java/com/dayu/pipirrapp/utils/MyLog.java | 4 16 files changed, 400 insertions(+), 128 deletions(-) diff --git a/app/src/main/assets/js/map.js b/app/src/main/assets/js/map.js index a3f9e30..367686b 100644 --- a/app/src/main/assets/js/map.js +++ b/app/src/main/assets/js/map.js @@ -48,7 +48,7 @@ // 鍦板浘鐐瑰嚮鍚庤幏鍙栫粡绾害 function getLngLat(lnglat) { console.log(lnglat.lng.toFixed(6) + "," + lnglat.lat.toFixed(6)); - addClickOverLay(lnglat); + // addClickOverLay(lnglat); } // 鐐瑰嚮鍚庢坊鍔犲潗鏍囩偣 @@ -169,6 +169,10 @@ window.setCenterAndZoom = setCenterAndZoom; window.updateLocation = updateLocation; window.aginShowLocation = aginShowLocation; + window.cleanLocationLay = cleanLocationLay; + window.updateInspectionLocation=updateInspectionLocation; + window.cleanLoclLay=cleanLoclLay; + } // 璋冪敤鍘熺敓瀹夊崜鏂规硶鏄剧ず鍙栨按鍙h鎯� @@ -271,18 +275,8 @@ }); return "addMarker鍔犺浇鎴愬姛" } - //淇濆瓨瀹氫綅鍧愭爣鐢熸垚杞ㄨ抗 - var path = []; - var lineLayer = new T.Polyline([], { color: '#ff4500', weight: 3, opacity: 0.8 }); - let locationMarker; + //鏇存柊瀹氫綅鍧愭爣 function updateLocation(log, lat) { - var lastLat = lat; - // const intervalId = setInterval(() => { - // lastLat=lastLat+0.0001; - var newPoint = new T.LngLat(log, lastLat); - path.push(newPoint); - lineLayer.setLngLats(path); - map.addOverLay(lineLayer); let icon = new T.Icon({ iconUrl: locationIMGPath, iconSize: new T.Point(20, 20), @@ -291,21 +285,58 @@ if (locationMarker) { map.removeOverLay(locationMarker); } - locationMarker = new T.Marker(new T.LngLat(log, lastLat), { icon: icon }); + var newPoint = new T.LngLat(log, lat); + locationMarker = new T.Marker(newPoint, { icon: icon }); map.addOverLay(locationMarker); - // 绉诲姩鍦板浘瑙嗚鍒版渶鍚庝竴涓綅缃� map.panTo(newPoint); - // }, 500); - } + //淇濆瓨瀹氫綅鍧愭爣鐢熸垚杞ㄨ抗 + var path = []; + var lineLayer = new T.Polyline([], { color: '#ff4500', weight: 3, opacity: 0.8 }); + let locationMarker; + function updateInspectionLocation(log, lat) { + var lastLat = lat; + // const intervalId = setInterval(() => { + // lastLat=lastLat+0.0001; + var newPoint = new T.LngLat(log, lastLat); + path.push(newPoint); + lineLayer.setLngLats(path); + map.addOverLay(lineLayer); + // 绉诲姩鍦板浘瑙嗚鍒版渶鍚庝竴涓綅缃� + + // }, 500); + } + var aginPath = []; + var oldLineLayer = new T.Polyline([], { color: '#ff4500', weight: 3, opacity: 0.8 }); + //鏄剧ず鍥犲紓甯稿叧闂殑宸℃璁板綍 function aginShowLocation(lng, lat) { // 璋冪敤 Android 鎻愪緵鐨勬帴鍙o紝鑾峰彇鏁版嵁 - console.log("aginShowLocation>>lng:"+lng+">>>lat:"+lat); + console.log("aginShowLocation>>lng:" + lng + ">>>lat:" + lat); var newPoint = new T.LngLat(lng, lat); aginPath.push(newPoint); - lineLayer.setLngLats(aginPath); - map.addOverLay(lineLayer); + oldLineLayer.setLngLats(aginPath); + map.addOverLay(oldLineLayer); + } + //娓呴櫎宸℃璁板綍杞ㄨ抗 + function cleanLocationLay() { + if (lineLayer) { + map.removeOverLay(lineLayer); + path=[] + } + if (locationMarker) { + map.removeOverLay(locationMarker); + } + if (oldLineLayer) { + aginPath=[] + map.removeOverLay(oldLineLayer); + } + } + //娓呴櫎鏈湴瀹氫綅鍧愭爣浣嶇疆 + function cleanLoclLay(){ + if (locationMarker) { + map.removeOverLay(locationMarker); + } } diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java index 2976fb0..e394ea6 100644 --- a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java +++ b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java @@ -1,10 +1,13 @@ package com.dayu.pipirrapp.activity; +import android.net.ConnectivityManager; +import android.net.Network; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; @@ -19,6 +22,9 @@ import com.dayu.pipirrapp.fragment.MapFragment; import com.dayu.pipirrapp.fragment.MyFragment; import com.dayu.pipirrapp.net.MqttManager; +import com.dayu.pipirrapp.tool.InspectionUtils; +import com.dayu.pipirrapp.utils.MyLog; +import com.dayu.pipirrapp.utils.NetUtils; import java.util.ArrayList; import java.util.List; @@ -41,13 +47,17 @@ super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(LayoutInflater.from(this)); setContentView(binding.getRoot()); - + registNetCallBack(); setupFragments(); initView(); initTab(); - TagBean tagBean = DaoSingleton.getInstance(this).tagDao().findFirst(); - MyApplication.myApplication.myTag = tagBean.getTag(); + try { + TagBean tagBean = DaoSingleton.getInstance(this).tagDao().findFirst(); + MyApplication.myApplication.myTag = tagBean.getTag(); + } catch (Exception e) { + e.printStackTrace(); + } mqttManager = new MqttManager(this); mqttManager.connect(); } @@ -90,7 +100,12 @@ protected void onDestroy() { super.onDestroy(); //鍏抽棴MQ - mqttManager.disconnect(); + try { + mqttManager.disconnect(); + unregisterNetworkCallback(); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -145,4 +160,36 @@ binding.myImg.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.bottom_my_black)); binding.myText.setTextColor(ContextCompat.getColor(this, R.color.black)); } + + // 娉ㄥ唽缃戠粶鐩戞帶 + private void registNetCallBack() { + NetUtils.registerNetCallBack(this, networkCallback); + } + + private void unregisterNetworkCallback() { + NetUtils.unregisterReceiver(this, networkCallback); + } + + //缃戠粶鐩戞帶 + ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { + @Override + public void onAvailable(@NonNull Network network) { + super.onAvailable(network); + // 杩欓噷鍙互鎵ц缃戠粶鍙敤鍚庣殑閫昏緫锛屾瘮濡傝繘琛屾暟鎹姹傜瓑 + MyLog.d("onAvailable"); + InspectionUtils.aginPutInspectionData(MainActivity.this); + } + + @Override + public void onLost(@NonNull Network network) { + super.onLost(network); + // 杩欓噷鍙互鎵ц缃戠粶涓㈠け鍚庣殑閫昏緫锛屾瘮濡傚仠姝㈡暟鎹姹傜瓑 + MyLog.d("onLost"); + } + }; + + + + + } diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java b/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java index d370968..55838f4 100644 --- a/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java +++ b/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java @@ -1,5 +1,6 @@ package com.dayu.pipirrapp.bean.db; +import androidx.annotation.NonNull; import androidx.room.Entity; import androidx.room.PrimaryKey; @@ -12,12 +13,32 @@ */ @Entity public class InspectionBean { - @PrimaryKey(autoGenerate = true) - public long id; + @PrimaryKey() + @NonNull + public String id; public String inspectId;//宸℃ID public String mInspectId;//鏈湴鏁版嵁搴撳贰妫�ID public String startTime;//寮�濮嬪贰妫�鏃堕棿 public String stopTime;//鍋滄宸℃鏃堕棿 + public String inspectorId;//宸℃鍛業D + + + public String getInspectorId() { + return inspectorId; + } + + public void setInspectorId(String inspectorId) { + this.inspectorId = inspectorId; + } + + @NonNull + public String getId() { + return id; + } + + public void setId(@NonNull String id) { + this.id = id; + } public String getmInspectId() { return mInspectId; diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java b/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java index 521044c..16739fc 100644 --- a/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java +++ b/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java @@ -16,7 +16,7 @@ @PrimaryKey() @NonNull public String id; - public String inspectorId;//宸℃鍛業D + public String inspectId;//宸℃ID public String mInspectId;//鏈湴鏁版嵁搴撳贰妫�ID public String lng;//缁忓害 @@ -40,13 +40,6 @@ this.mInspectId = mInspectId; } - public String getInspectorId() { - return inspectorId; - } - - public void setInspectorId(String inspectorId) { - this.inspectorId = inspectorId; - } public String getInspectId() { return inspectId; diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/InsectionResult.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/InsectionResult.java index a7f834e..a509e35 100644 --- a/app/src/main/java/com/dayu/pipirrapp/bean/net/InsectionResult.java +++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/InsectionResult.java @@ -10,22 +10,22 @@ public class InsectionResult { - String inspectId;//宸℃id - String inspectorId;//宸℃鍛榠d + long inspectId;//宸℃id + long inspectorId;//宸℃鍛榠d - public String getInspectId() { + public long getInspectId() { return inspectId; } - public void setInspectId(String inspectId) { + public void setInspectId(long inspectId) { this.inspectId = inspectId; } - public String getInspectorId() { + public long getInspectorId() { return inspectorId; } - public void setInspectorId(String inspectorId) { + public void setInspectorId(long inspectorId) { this.inspectorId = inspectorId; } } diff --git a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java index 72bd3c5..8903dff 100644 --- a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java +++ b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java @@ -19,7 +19,7 @@ Completable insert(InspectionBean inspectionBean); @Update - void update(InspectionBean inspectionBean); + Completable update(InspectionBean inspectionBean); @Delete void delete(InspectionBean inspectionBean); diff --git a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java index 801797c..efb9a3a 100644 --- a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java +++ b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java @@ -32,12 +32,19 @@ InspectionLocationBean findFirst(); //鏌ヨ鎵�鏈夋病鏈変笂浼犵殑鍧愭爣 - @Query("select * from InspectionLocationBean where isPost=false") - List<InspectionLocationBean> findByNoPost(); + @Query("select * from InspectionLocationBean where isPost=false AND mInspectId=:mInspectId ORDER BY locateTime ASC") + Single<List<InspectionLocationBean>> findByNoPostAndInspectId(String mInspectId); //鏌ヨ鎵�鏈夎宸℃id鐨勫潗鏍� @Query("select * from InspectionLocationBean where mInspectId=:mInspectId ORDER BY locateTime ASC") Single<List<InspectionLocationBean>> findByInspectId(String mInspectId); + //鏌ヨ鎵�鏈夋湭涓婁紶鐨刴InspectId + @Query("SELECT DISTINCT mInspectId FROM InspectionLocationBean WHERE isPost = false") + Single<List<String>> getUnpostedMInspectIds(); + + //鏇存柊鎵�鏈塵InspectId涓嬬殑宸蹭笂浼犵姸鎬� + @Query("UPDATE InspectionLocationBean SET isPost = true WHERE mInspectId = :mInspectId") + Completable updataByInspectIdSetIsPost(String mInspectId); } diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java index b4d3094..ac24cfa 100644 --- a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java +++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java @@ -8,6 +8,7 @@ import android.location.LocationManager; import android.os.Build; import android.os.Bundle; +import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -45,6 +46,7 @@ import com.dayu.pipirrapp.tool.InspectionUtils; import com.dayu.pipirrapp.utils.CommonData; import com.dayu.pipirrapp.utils.CommonKeyName; +import com.dayu.pipirrapp.utils.DateUtils; import com.dayu.pipirrapp.utils.MapJpgUtils; import com.dayu.pipirrapp.utils.MyLog; import com.dayu.pipirrapp.utils.SharedPreferencesHelper; @@ -278,14 +280,14 @@ @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); - Log.i(TAG, "鍔犺浇鍦板潃>>>" + url); +// Log.d(TAG, "鍔犺浇鍦板潃>>>" + url); //鍒ゆ柇褰撳墠鏄惁涓哄姞杞界摝鐗� if (MapJpgUtils.getInsatance().isTianDiTuTileRequest(url)) { String androidUrl = url.replace(CommonData.webKey, CommonData.androidKey); // 妫�鏌ユ湰鍦扮紦瀛� File cachedTile = MapJpgUtils.getInsatance().getCachedTile(androidUrl); if (cachedTile != null && cachedTile.exists()) { - Log.i(TAG, "鏈湴缂撳瓨>>>" + androidUrl); +// Log.d(TAG, "鏈湴缂撳瓨>>>" + androidUrl); // if (MapJpgUtils.getInsatance().validateImageFile(androidUrl,request.)) // 鍒ゆ柇缂撳瓨鏄惁杩囨湡 // if (!MapJpgUtils.getInsatance(MapFragment.this.getContext()).isCacheExpired(cachedTile)) { @@ -298,9 +300,9 @@ // } } else { //涓嬭浇鐡︾墖 - ApiManager.getInstance().donwLoadTile(androidUrl); + ApiManager.getInstance().donwLoadTile(MapFragment.this.getContext(),androidUrl); } - Log.i(TAG, "鍦ㄧ嚎鍔犺浇>>>" + url); +// Log.d(TAG, "鍦ㄧ嚎鍔犺浇>>>" + url); } @@ -398,10 +400,12 @@ */ private void pushLocationData(InspectionLocationBean inspectionLocationBean) { inspectionRequest.setInspectId(inspectionLocationBean.getInspectId()); - inspectionRequest.setInspectorId(inspectionLocationBean.getInspectorId()); + inspectionRequest.setInspectorId(mInspectionBean.getInspectorId()); if (mInspectionBean != null) { inspectionRequest.setStartTime(mInspectionBean.getStartTime()); - inspectionRequest.setStopTime(mInspectionBean.getStopTime()); + if (!TextUtils.isEmpty(mInspectionBean.getStopTime())) { + inspectionRequest.setStopTime(mInspectionBean.getStopTime()); + } } InspectionRequest.Track track = new InspectionRequest.Track(); track.setLat(inspectionLocationBean.getLat()); @@ -415,7 +419,8 @@ try { if (t.isSuccess()) { if (t.getContent() != null) { - + mInspectionBean.setInspectId(String.valueOf(t.getContent().get(0).getInspectId())); + InspectionUtils.upataInspectionData(MapFragment.this.getContext(), mInspectionBean); } inspectionLocationBean.setPost(true); InspectionUtils.updateInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean); @@ -454,6 +459,8 @@ InspectionLocationBean inspectionLocationBean = InspectionUtils.createInspectionLocation(latLonBean, mInspectionBean); InspectionUtils.addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean); //鏇存柊鍒板湴鍥� + mWebView.evaluateJavascript("javascript:updateInspectionLocation(\"" + latLonBean.getLongitude() + "\",\"" + latLonBean.getLatitude() + "\")", value -> { + }); mWebView.evaluateJavascript("javascript:updateLocation(\"" + latLonBean.getLongitude() + "\",\"" + latLonBean.getLatitude() + "\")", value -> { }); //涓婁紶鍧愭爣 @@ -476,7 +483,7 @@ location.putExtra("isSingle", false); //0娌℃湁寮�濮嬶紝1寮�濮嬶紝2鏆傚仠,3鍏抽棴 switch (inspectionState) { - case 0: + case InspectionUtils.NO_INSPECTION: binding.inspectButton.setVisibility(View.VISIBLE); binding.inspectRL.setVisibility(View.GONE); binding.inspectButton.setText("宸�"); @@ -493,7 +500,7 @@ startLocation(location); break; - case 2://鏆傚仠 + case InspectionUtils.PAUSE_INSPECTION://鏆傚仠 try { //鍏抽棴瀹氫綅 this.getActivity().stopService(location); @@ -501,17 +508,32 @@ binding.inspectPause.setText("缁х画"); binding.inspectRL.setBackgroundColor(this.getContext().getResources().getColor(R.color.inspect_rl_bg_color)); SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.inspectionState, InspectionUtils.PAUSE_INSPECTION); + //娓呴櫎鍦板浘宸℃杞ㄨ抗 + mWebView.evaluateJavascript("javascript:cleanLoclLay()", value -> { + }); } catch (Resources.NotFoundException e) { e.printStackTrace(); } break; - case 3: + case InspectionUtils.STOP_INSPECTION://鍏抽棴 ConfirmDialog confirmDialog = new ConfirmDialog(MapFragment.this.getActivity(), "鎻愮ず", "纭鍏抽棴宸℃鍚楋紵", new ConfirmDialog.ConfirmOnClickListener() { @Override public void onClick(ConfirmDialog confirmDialog, View v) { confirmDialog.dismiss(); chageInspecState(InspectionUtils.NO_INSPECTION); SharedPreferencesHelper.getInstance(MapFragment.this.getContext()).put(CommonKeyName.inspectionState, InspectionUtils.NO_INSPECTION); + //鏇存柊鏈湴鏁版嵁搴撶粨鏉熸椂闂� + mInspectionBean.setStopTime(DateUtils.getNowDateStr()); + InspectionUtils.upataInspectionData(MapFragment.this.getContext(), mInspectionBean); + //涓婃姤缁撴潫鏃堕棿 + InspectionLocationBean inspectionLocationBean = InspectionUtils.createInspectionLocation(lastLatLonBean, mInspectionBean); + InspectionUtils.addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean); + pushLocationData(inspectionLocationBean); + mInspectionBean = new InspectionBean(); + //娓呴櫎鍦板浘宸℃杞ㄨ抗 + mWebView.evaluateJavascript("javascript:cleanLocationLay()", value -> { + }); + lastLatLonBean = null; } }); confirmDialog.show(); diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java index 046e695..4f5be47 100644 --- a/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java +++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java @@ -22,8 +22,6 @@ import com.dayu.pipirrapp.utils.SharedPreferencesHelper; import com.dayu.pipirrapp.utils.ToastUtil; import com.dayu.pipirrapp.view.ConfirmDialog; -import com.dayu.pipirrapp.view.TagDialog; -import com.dayu.pipirrapp.view.TipDialog; import com.dayu.pipirrapp.view.TipUtil; /** diff --git a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java index 8e03e6f..dc7a736 100644 --- a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java +++ b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java @@ -1,10 +1,6 @@ package com.dayu.pipirrapp.net; import android.content.Context; -import android.net.ConnectivityManager; -import android.net.NetworkCapabilities; -import android.net.NetworkInfo; -import android.os.Build; import android.util.Log; import com.dayu.pipirrapp.MyApplication; @@ -18,6 +14,7 @@ import com.dayu.pipirrapp.net.upload.UploadFileListener; import com.dayu.pipirrapp.utils.MapJpgUtils; import com.dayu.pipirrapp.utils.MyJsonParser; +import com.dayu.pipirrapp.utils.NetUtils; import java.util.HashMap; import java.util.List; @@ -88,6 +85,7 @@ public <T> void requestGet(final Context context, final String path, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) { request(context, false, path, true, tClass, params, listener); } + public <T> void requestGetHideLoading(final Context context, final String path, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) { request(context, true, path, true, tClass, params, listener); } @@ -201,7 +199,7 @@ * @param <T> */ public <T> void getCode(Map<String, Object> params, CodeListener listener) { - if (isNetworkAvailable(MyApplication.myApplication)) { + if (NetUtils.isNetworkAvailable(MyApplication.myApplication)) { Observable observable; observable = apiService.getCode(params); observable.subscribeOn(Schedulers.io()) @@ -224,33 +222,31 @@ * * @param urlPath */ - public void donwLoadTile(String urlPath) { - Observable<ResponseBody> observable; - observable = apiService.downloadTile(urlPath); + public void donwLoadTile(Context context, String urlPath) { + if (NetUtils.isNetworkAvailable(context)) { + Observable<ResponseBody> observable; + observable = apiService.downloadTile(urlPath); + observable + .subscribeOn(Schedulers.io()) // 缃戠粶璇锋眰鍦� I/O 绾跨▼涓繘琛� + .observeOn(Schedulers.io()) // 鍥炶皟澶勭悊涔熷湪 I/O 绾跨▼ + .subscribe( + responseBody -> { - -// compositeDisposable.add( - observable - .subscribeOn(Schedulers.io()) // 缃戠粶璇锋眰鍦� I/O 绾跨▼涓繘琛� - .observeOn(Schedulers.io()) // 鍥炶皟澶勭悊涔熷湪 I/O 绾跨▼ - .subscribe( - responseBody -> { - - boolean success = false; - if (!MapJpgUtils.getInsatance().isHasFiles(urlPath)) { - success = MapJpgUtils.getInsatance().saveTileToCache(urlPath, responseBody); - } - if (success) { - Log.d(TAG, "Download success for tile: " + urlPath); - } else { - Log.e(TAG, "Failed to save tile to disk: " + urlPath); - } - }, - throwable -> Log.e(TAG, "Download failed for tile: " + urlPath) - ); -// ); - - + boolean success = false; + if (!MapJpgUtils.getInsatance().isHasFiles(urlPath)) { + success = MapJpgUtils.getInsatance().saveTileToCache(urlPath, responseBody); + } + if (success) { + Log.d(TAG, "Download success for tile: " + urlPath); + } else { + Log.e(TAG, "Failed to save tile to disk: " + urlPath); + } + }, + throwable -> Log.e(TAG, "Download failed for tile: " + urlPath) + ); + } else { + Log.e(TAG, "娌℃湁缃戠粶涓嶄笅杞�: " + urlPath); + } } // 鍋滄绾跨▼姹狅紝閲婃斁璧勬簮 @@ -260,36 +256,6 @@ } } - /** - * 鍒ゆ柇褰撳墠鏄惁鏈夌綉缁� - * - * @param context - * @return - */ - public boolean isNetworkAvailable(Context context) { - ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - - if (connectivityManager != null) { - // 瀵逛簬 Android 鐗堟湰澶т簬绛変簬 Android Q (API level 29) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork()); - if (capabilities != null) { - // 妫�鏌ョ綉缁滄槸鍚︽湁浼犺緭鑳藉姏锛堝寘鎷� Wi-Fi 鍜岀Щ鍔ㄦ暟鎹級 - if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { - return true; - } - } - } else { - // 瀵逛簬 Android Q 浠ヤ笅鐗堟湰 - NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); - if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { - return true; - } - } - } - - return false; // 鏃犵綉缁滆繛鎺� - } /** * 涓婁紶鏂囦欢 @@ -340,8 +306,6 @@ } }); } - - } \ No newline at end of file diff --git a/app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java b/app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java index 8da13e0..32f133b 100644 --- a/app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java +++ b/app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java @@ -3,7 +3,7 @@ import android.text.TextUtils; import com.dayu.pipirrapp.MyApplication; -import com.dayu.pipirrapp.utils.ToastUtil; +import com.dayu.pipirrapp.utils.NetUtils; import com.tencent.bugly.crashreport.CrashReport; import java.io.IOException; @@ -30,9 +30,8 @@ public Response intercept(Chain chain) throws IOException { Request request = chain.request(); try { - - Request myRequest = createRequest(chain.request()); - if (myRequest != null) { + if (NetUtils.isNetworkAvailable(MyApplication.myApplication)) { + Request myRequest = createRequest(chain.request()); Response response = null; try { response = chain.proceed(myRequest); @@ -42,7 +41,8 @@ } return response; } else { - ToastUtil.showToastLong(MyApplication.myApplication, "璇锋鏌ョ綉缁滆繛鎺�!!"); + return getNullResponse(request); + } } catch (Exception e) { e.printStackTrace(); @@ -91,7 +91,7 @@ public Response getNullResponse(Request request) { int code = 20010; String message = "鍜︼紝璇锋鏌ョ綉缁�"; - String errJson = "{\"code\":" + code + ",\"message\":\"" + message + "\"}"; + String errJson = "{\"code\":" + code + ",\"msg\":\"" + message + "\"}"; Response.Builder builder = new Response.Builder().body(ResponseBody.create(MediaType.parse("application/json"), errJson)); builder.request(request); builder.protocol(Protocol.HTTP_1_1); diff --git a/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java b/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java index 00c7aea..3b17e9c 100644 --- a/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java +++ b/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java @@ -219,7 +219,7 @@ String longitude = "Longitude:" + location.getLongitude(); String latitude = "Latitude:" + location.getLatitude(); - MyLog.i("鍘熺敓瀹氫綅onLocationChanged: Latitude锛�" + latitude + " Longitude锛�" + longitude); + MyLog.d("鍘熺敓瀹氫綅onLocationChanged: Latitude锛�" + latitude + " Longitude锛�" + longitude); postPosition(location.getLatitude(), location.getLongitude()); // 鏄惁涓�娆℃�у畾浣� if (isSingle) { diff --git a/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java b/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java index b14376b..add7b6f 100644 --- a/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java +++ b/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java @@ -1,7 +1,10 @@ package com.dayu.pipirrapp.tool; +import static com.dayu.pipirrapp.net.Constants.BASE_URL; + import android.content.Context; import android.location.Location; +import android.text.TextUtils; import android.util.Log; import androidx.room.Transaction; @@ -10,13 +13,22 @@ import com.dayu.pipirrapp.bean.db.InspectionBean; import com.dayu.pipirrapp.bean.db.InspectionLocationBean; import com.dayu.pipirrapp.bean.db.LatLonBean; +import com.dayu.pipirrapp.bean.net.InsectionResult; +import com.dayu.pipirrapp.bean.net.InspectionRequest; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.fragment.MapFragment; +import com.dayu.pipirrapp.net.ApiManager; +import com.dayu.pipirrapp.net.BaseResponse; +import com.dayu.pipirrapp.net.subscribers.SubscriberListener; import com.dayu.pipirrapp.utils.DateUtils; +import com.tencent.bugly.crashreport.CrashReport; +import java.util.List; import java.util.UUID; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.functions.Action; +import io.reactivex.rxjava3.functions.Consumer; import io.reactivex.rxjava3.schedulers.Schedulers; /** @@ -80,6 +92,8 @@ InspectionBean inspectionBean = new InspectionBean(); inspectionBean.setmInspectId(UUID.randomUUID().toString()); inspectionBean.setStartTime(DateUtils.getNowDateStr()); + inspectionBean.setId(UUID.randomUUID().toString()); + inspectionBean.setInspectorId(MyApplication.myApplication.userId); // inspectionBean. // 寮傛鎻掑叆鍒版暟鎹簱 DaoSingleton.getAsynchInstance(context) @@ -90,7 +104,7 @@ .subscribe(() -> { Log.i(TAG, "Inspection started and inserted successfully."); }, throwable -> { - Log.e(TAG, "Error inserting inspection data: "+throwable); + Log.e(TAG, "Error inserting inspection data: " + throwable); }); // 鑾峰彇Dao骞舵墽琛屾彃鍏ユ搷浣� return inspectionBean; // 鎻掑叆瀹屾垚鍚庡垏鎹㈠埌涓荤嚎绋� @@ -115,6 +129,82 @@ ; } + + //涓婁紶鍥犵綉缁滈棶棰樹骇鐢熺殑鏈笂浼犳暟鎹� + public static void aginPutInspectionData(Context context) { + //鏌ヨ娌℃湁涓婁紶鐨勬墍鏈夋湰鍦版暟鎹簱鐨勫贰妫�id + DaoSingleton.getAsynchInstance(context).inspectionLocationDao().getUnpostedMInspectIds() + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe(strings -> { + //寰幆鏌ヨ鎵�鏈塱d + for (String data : strings) { + DaoSingleton.getAsynchInstance(context).inspectionDao().findBymInspectId(data) + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe(inspectionBeans -> { + DaoSingleton.getAsynchInstance(context).inspectionLocationDao().findByNoPostAndInspectId(data) + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe(inspectionLocationBeans -> { + postInspectionData(context, inspectionBeans, inspectionLocationBeans); + }); + }); + } + + }); + } + + + /** + * 涓婁紶鏈笂浼犳垚鍔熺殑鍧愭爣 + * + * @param inspectionBean + * @param inspectionLocationBeans + */ + private static void postInspectionData(Context context, InspectionBean inspectionBean, List<InspectionLocationBean> inspectionLocationBeans) { + InspectionRequest inspectionRequest = new InspectionRequest(); + inspectionRequest.setInspectId(inspectionBean.getInspectId()); + inspectionRequest.setInspectorId(inspectionBean.getInspectorId()); + inspectionRequest.setStartTime(inspectionBean.getStartTime()); + if (!TextUtils.isEmpty(inspectionBean.getStopTime())) { + inspectionRequest.setStopTime(inspectionBean.getStopTime()); + } + for (InspectionLocationBean inspectionLocationBean : inspectionLocationBeans) { + InspectionRequest.Track track = new InspectionRequest.Track(); + track.setLat(inspectionLocationBean.getLat()); + track.setLng(inspectionLocationBean.getLng()); + track.setLocateTime(inspectionLocationBean.getLocateTime()); + inspectionRequest.addTracks(track); + } + ApiManager.getInstance().requestPostHideLoading(context, BASE_URL + "/app/inspect/save", InsectionResult.class, inspectionRequest.toMap(inspectionRequest), new SubscriberListener<BaseResponse<List<InsectionResult>>>() { + @Override + public void onNext(BaseResponse<List<InsectionResult>> t) { + try { + if (t.isSuccess()) { + if (t.getContent() != null) { + inspectionBean.setInspectId(String.valueOf(t.getContent().get(0).getInspectId())); + InspectionUtils.upataInspectionData(context, inspectionBean); + } + DaoSingleton.getAsynchInstance(context).inspectionLocationDao().updataByInspectIdSetIsPost(inspectionBean.getmInspectId()).subscribeOn(Schedulers.io()).observeOn(Schedulers.io()).subscribe(() -> { + // 鎻掑叆鎴愬姛鐨勫洖璋� + Log.d(TAG, "addInspectionLocationData鏁版嵁鎻掑叆鎴愬姛"); + }, throwable -> { + // 澶勭悊閿欒 + Log.e(TAG, "addInspectionLocationData鏁版嵁鎻掑叆澶辫触", throwable); + }); + } else { + + } + } catch (Exception e) { + e.printStackTrace(); + CrashReport.postCatchedException(e); + } + + } + }); + } + /** * 淇敼宸℃璁板綍鍧愭爣 * @@ -132,6 +222,21 @@ Log.e(TAG, "updateInspectionLocationData鏁版嵁鎻掑叆澶辫触", throwable); }); ; + } + + /** + * 淇敼宸℃淇℃伅 + * + * @param context + * @param inspectionBean + */ + public static void upataInspectionData(Context context, InspectionBean inspectionBean) { + DaoSingleton.getAsynchInstance(context).inspectionDao().update(inspectionBean).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(() -> { + // 鎻掑叆鎴愬姛鐨勫洖璋� + Log.d(TAG, "uupataInspectionData鏁版嵁鎻掑叆鎴愬姛"); + }, throwable -> { + Log.e(TAG, "upataInspectionData鏁版嵁鎻掑叆澶辫触", throwable); + }); } /** @@ -167,7 +272,7 @@ inspectionLocationBean.setmInspectId(mInspectionBean.getmInspectId()); inspectionLocationBean.setLocateTime(DateUtils.getNowDateStr()); inspectionLocationBean.setPost(false); - inspectionLocationBean.setInspectorId(MyApplication.myApplication.userId); + inspectionLocationBean.setLng(String.valueOf(latLonBean.getLongitude())); inspectionLocationBean.setLat(String.valueOf(latLonBean.getLatitude())); return inspectionLocationBean; diff --git a/app/src/main/java/com/dayu/pipirrapp/utils/MyLog.java b/app/src/main/java/com/dayu/pipirrapp/utils/MyLog.java index bb34e84..265e172 100644 --- a/app/src/main/java/com/dayu/pipirrapp/utils/MyLog.java +++ b/app/src/main/java/com/dayu/pipirrapp/utils/MyLog.java @@ -15,5 +15,9 @@ Log.i(TAG, data); } + public static void d(String data) { + Log.d(TAG, data); + } + } diff --git a/app/src/main/java/com/dayu/pipirrapp/utils/NetUtils.java b/app/src/main/java/com/dayu/pipirrapp/utils/NetUtils.java new file mode 100644 index 0000000..cbb1d8a --- /dev/null +++ b/app/src/main/java/com/dayu/pipirrapp/utils/NetUtils.java @@ -0,0 +1,80 @@ +package com.dayu.pipirrapp.utils; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkCapabilities; +import android.net.NetworkInfo; +import android.net.NetworkRequest; +import android.os.Build; + +/** + * NetUtils - 缃戠粶鐩稿叧鍏叡鏂规硶 + * + * @author zuoxiao + * @version 1.0 + * @since 2024-12-04 + */ +public class NetUtils { + public static final String TAG = "NetUtils"; + + /** + * 鍒ゆ柇褰撳墠鏄惁鏈夌綉缁� + * + * @param context + * @return + */ + public static boolean isNetworkAvailable(Context context) { + ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + + if (connectivityManager != null) { + // 瀵逛簬 Android 鐗堟湰澶т簬绛変簬 Android Q (API level 29) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork()); + if (capabilities != null) { + // 妫�鏌ョ綉缁滄槸鍚︽湁浼犺緭鑳藉姏锛堝寘鎷� Wi-Fi 鍜岀Щ鍔ㄦ暟鎹級 + if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { + return true; + } + } + } else { + // 瀵逛簬 Android Q 浠ヤ笅鐗堟湰 + NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); + if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { + return true; + } + } + } + + return false; // 鏃犵綉缁滆繛鎺� + } + + + public static void registerNetCallBack(Context context, ConnectivityManager.NetworkCallback networkCallback) { + // 娉ㄥ唽缃戠粶鐘舵�佺洃鍚� + + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + + // 鏋勫缓涓�涓� NetworkRequest锛屾寚瀹氭劅鍏磋叮鐨勭綉缁滅被鍨� + NetworkRequest networkRequest = new NetworkRequest.Builder() + + .build(); + + // 缃戠粶鍥炶皟 + + + // 娉ㄥ唽缃戠粶鐩戝惉 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + cm.registerNetworkCallback(networkRequest, networkCallback); + } else { + // 瀵逛簬杈冭�佺増鏈紝鍙互浣跨敤鏃х殑鏂规硶娉ㄥ唽缃戠粶鐘舵�佺洃鍚� + // ConnectivityManager.setNetworkCallback() 鏃犳硶鍦� API 绾у埆 24 浠ヤ笅浣跨敤 + } + } + + // 娉ㄩ攢骞挎挱鎺ユ敹鍣� + public static void unregisterReceiver(Context context,ConnectivityManager.NetworkCallback networkCallback) { + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + cm.unregisterNetworkCallback(networkCallback); + } + +} diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 20ac86a..e81a015 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -18,7 +18,7 @@ android:background="@drawable/ic_edt_gray_bg" android:hint="璇疯緭鍏ヨ处鍙�" android:maxLines="1" - android:text="admin" + android:text="15802220723" android:paddingLeft="15dp" android:singleLine="true" /> @@ -45,7 +45,7 @@ android:hint="璇疯緭鍏ュ瘑鐮�" android:inputType="textPassword" android:maxLines="1" - android:text="dyyjy" + android:text="abc_123" android:paddingLeft="10dp" android:singleLine="true" /> -- Gitblit v1.8.0