diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 3028e00..d2c96a9 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -30,13 +30,28 @@ private static final double pi = 3.14159265358979324; private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 + private final AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + private AMapLocationClient mLocationClient; + + private LocationHelper() { + } + + private static final class LocationHelperHolder { + static final LocationHelper INSTANCE = new LocationHelper(); + } + + /** + * 双重锁单例 + */ + public static LocationHelper get() { + return LocationHelper.LocationHelperHolder.INSTANCE; + } /** * 高德sdk定位 */ - public static void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { - AMapLocationClient mLocationClient = new AMapLocationClient(context); - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + public void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { + mLocationClient = new AMapLocationClient(context); //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(isOnce);//设置是否只定位一次,默认为false @@ -50,10 +65,8 @@ if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { listener.onAMapLocationGet(aMapLocation); -// mLocationClient.stopLocation();//停止定位 } else { listener.onAMapLocationGet(null); - //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e(TAG, "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } @@ -64,10 +77,17 @@ mLocationClient.startLocation(); } + public void stopLocation() { + if (mLocationClient != null) { + mLocationClient.stopLocation(); + Log.d(TAG, "stopLocation: 停止定位"); + } + } + /** * 查询社区信息 */ - public static void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { + public void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); communityFeatureResult.addDoneListener(new Runnable() { @Override @@ -88,7 +108,7 @@ /** * 经纬度反编码为地址 */ - public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + public void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { try { GeocodeSearch codeSearch = new GeocodeSearch(context); // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 @@ -119,14 +139,14 @@ * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ - private static boolean isOutOfChina(double lng, double lat) { + private boolean isOutOfChina(double lng, double lat) { if (lng >= 72.004 && lng <= 137.8347) { return lat >= 0.8293 && lat <= 55.8271; } return false; } - public static double[] gcjToWgs(double gcjLng, double gcjLat) { + public double[] gcjToWgs(double gcjLng, double gcjLat) { if (isOutOfChina(gcjLng, gcjLat)) { return new double[]{gcjLng, gcjLat}; } @@ -141,7 +161,7 @@ return new double[]{gcjLng - dLng, gcjLat - dLat}; } - private static double transformLon(double lng, double lat) { + private double transformLon(double lng, double lat) { double ret = 300.0 + lat + 2.0 * lng + 0.1 * lat * lat + 0.1 * lat * lng + 0.1 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0; @@ -149,7 +169,7 @@ return ret; } - private static double transformLat(double lng, double lat) { + private double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lat + 3.0 * lng + 0.2 * lng * lng + 0.1 * lat * lng + 0.2 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0; diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 3028e00..d2c96a9 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -30,13 +30,28 @@ private static final double pi = 3.14159265358979324; private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 + private final AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + private AMapLocationClient mLocationClient; + + private LocationHelper() { + } + + private static final class LocationHelperHolder { + static final LocationHelper INSTANCE = new LocationHelper(); + } + + /** + * 双重锁单例 + */ + public static LocationHelper get() { + return LocationHelper.LocationHelperHolder.INSTANCE; + } /** * 高德sdk定位 */ - public static void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { - AMapLocationClient mLocationClient = new AMapLocationClient(context); - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + public void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { + mLocationClient = new AMapLocationClient(context); //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(isOnce);//设置是否只定位一次,默认为false @@ -50,10 +65,8 @@ if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { listener.onAMapLocationGet(aMapLocation); -// mLocationClient.stopLocation();//停止定位 } else { listener.onAMapLocationGet(null); - //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e(TAG, "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } @@ -64,10 +77,17 @@ mLocationClient.startLocation(); } + public void stopLocation() { + if (mLocationClient != null) { + mLocationClient.stopLocation(); + Log.d(TAG, "stopLocation: 停止定位"); + } + } + /** * 查询社区信息 */ - public static void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { + public void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); communityFeatureResult.addDoneListener(new Runnable() { @Override @@ -88,7 +108,7 @@ /** * 经纬度反编码为地址 */ - public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + public void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { try { GeocodeSearch codeSearch = new GeocodeSearch(context); // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 @@ -119,14 +139,14 @@ * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ - private static boolean isOutOfChina(double lng, double lat) { + private boolean isOutOfChina(double lng, double lat) { if (lng >= 72.004 && lng <= 137.8347) { return lat >= 0.8293 && lat <= 55.8271; } return false; } - public static double[] gcjToWgs(double gcjLng, double gcjLat) { + public double[] gcjToWgs(double gcjLng, double gcjLat) { if (isOutOfChina(gcjLng, gcjLat)) { return new double[]{gcjLng, gcjLat}; } @@ -141,7 +161,7 @@ return new double[]{gcjLng - dLng, gcjLat - dLat}; } - private static double transformLon(double lng, double lat) { + private double transformLon(double lng, double lat) { double ret = 300.0 + lat + 2.0 * lng + 0.1 * lat * lat + 0.1 * lat * lng + 0.1 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0; @@ -149,7 +169,7 @@ return ret; } - private static double transformLat(double lng, double lat) { + private double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lat + 3.0 * lng + 0.2 * lng * lng + 0.1 * lat * lng + 0.2 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0; diff --git a/app/src/main/java/com/casic/dcms/view/MainActivity.java b/app/src/main/java/com/casic/dcms/view/MainActivity.java index 4f76c3b..87b179b 100644 --- a/app/src/main/java/com/casic/dcms/view/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/MainActivity.java @@ -85,7 +85,7 @@ } else if (msg.what == LocaleConstant.UPDATE_LOCATION) { AMapLocation aMapLocation = (AMapLocation) msg.obj; try { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); positionViewModel.uploadPosition(context, imei, String.valueOf(gcjToWgs[1]), String.valueOf(gcjToWgs[0])); } catch (NullPointerException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 3028e00..d2c96a9 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -30,13 +30,28 @@ private static final double pi = 3.14159265358979324; private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 + private final AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + private AMapLocationClient mLocationClient; + + private LocationHelper() { + } + + private static final class LocationHelperHolder { + static final LocationHelper INSTANCE = new LocationHelper(); + } + + /** + * 双重锁单例 + */ + public static LocationHelper get() { + return LocationHelper.LocationHelperHolder.INSTANCE; + } /** * 高德sdk定位 */ - public static void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { - AMapLocationClient mLocationClient = new AMapLocationClient(context); - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + public void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { + mLocationClient = new AMapLocationClient(context); //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(isOnce);//设置是否只定位一次,默认为false @@ -50,10 +65,8 @@ if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { listener.onAMapLocationGet(aMapLocation); -// mLocationClient.stopLocation();//停止定位 } else { listener.onAMapLocationGet(null); - //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e(TAG, "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } @@ -64,10 +77,17 @@ mLocationClient.startLocation(); } + public void stopLocation() { + if (mLocationClient != null) { + mLocationClient.stopLocation(); + Log.d(TAG, "stopLocation: 停止定位"); + } + } + /** * 查询社区信息 */ - public static void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { + public void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); communityFeatureResult.addDoneListener(new Runnable() { @Override @@ -88,7 +108,7 @@ /** * 经纬度反编码为地址 */ - public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + public void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { try { GeocodeSearch codeSearch = new GeocodeSearch(context); // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 @@ -119,14 +139,14 @@ * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ - private static boolean isOutOfChina(double lng, double lat) { + private boolean isOutOfChina(double lng, double lat) { if (lng >= 72.004 && lng <= 137.8347) { return lat >= 0.8293 && lat <= 55.8271; } return false; } - public static double[] gcjToWgs(double gcjLng, double gcjLat) { + public double[] gcjToWgs(double gcjLng, double gcjLat) { if (isOutOfChina(gcjLng, gcjLat)) { return new double[]{gcjLng, gcjLat}; } @@ -141,7 +161,7 @@ return new double[]{gcjLng - dLng, gcjLat - dLat}; } - private static double transformLon(double lng, double lat) { + private double transformLon(double lng, double lat) { double ret = 300.0 + lat + 2.0 * lng + 0.1 * lat * lat + 0.1 * lat * lng + 0.1 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0; @@ -149,7 +169,7 @@ return ret; } - private static double transformLat(double lng, double lat) { + private double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lat + 3.0 * lng + 0.2 * lng * lng + 0.1 * lat * lng + 0.2 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0; diff --git a/app/src/main/java/com/casic/dcms/view/MainActivity.java b/app/src/main/java/com/casic/dcms/view/MainActivity.java index 4f76c3b..87b179b 100644 --- a/app/src/main/java/com/casic/dcms/view/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/MainActivity.java @@ -85,7 +85,7 @@ } else if (msg.what == LocaleConstant.UPDATE_LOCATION) { AMapLocation aMapLocation = (AMapLocation) msg.obj; try { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); positionViewModel.uploadPosition(context, imei, String.valueOf(gcjToWgs[1]), String.valueOf(gcjToWgs[0])); } catch (NullPointerException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java index 8496731..f7827e6 100644 --- a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java @@ -150,7 +150,7 @@ binding.submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -164,7 +164,7 @@ return; } LatLonPoint latLonPoint = new LatLonPoint(aMapLocation.getLatitude(), aMapLocation.getLongitude()); - LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + LocationHelper.get().antiCodingLocation(context, latLonPoint, new IAddressListener() { @Override public void onGetAddress(String address) { Log.d(TAG, "onGetAddress: " + address); diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 3028e00..d2c96a9 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -30,13 +30,28 @@ private static final double pi = 3.14159265358979324; private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 + private final AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + private AMapLocationClient mLocationClient; + + private LocationHelper() { + } + + private static final class LocationHelperHolder { + static final LocationHelper INSTANCE = new LocationHelper(); + } + + /** + * 双重锁单例 + */ + public static LocationHelper get() { + return LocationHelper.LocationHelperHolder.INSTANCE; + } /** * 高德sdk定位 */ - public static void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { - AMapLocationClient mLocationClient = new AMapLocationClient(context); - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + public void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { + mLocationClient = new AMapLocationClient(context); //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(isOnce);//设置是否只定位一次,默认为false @@ -50,10 +65,8 @@ if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { listener.onAMapLocationGet(aMapLocation); -// mLocationClient.stopLocation();//停止定位 } else { listener.onAMapLocationGet(null); - //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e(TAG, "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } @@ -64,10 +77,17 @@ mLocationClient.startLocation(); } + public void stopLocation() { + if (mLocationClient != null) { + mLocationClient.stopLocation(); + Log.d(TAG, "stopLocation: 停止定位"); + } + } + /** * 查询社区信息 */ - public static void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { + public void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); communityFeatureResult.addDoneListener(new Runnable() { @Override @@ -88,7 +108,7 @@ /** * 经纬度反编码为地址 */ - public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + public void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { try { GeocodeSearch codeSearch = new GeocodeSearch(context); // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 @@ -119,14 +139,14 @@ * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ - private static boolean isOutOfChina(double lng, double lat) { + private boolean isOutOfChina(double lng, double lat) { if (lng >= 72.004 && lng <= 137.8347) { return lat >= 0.8293 && lat <= 55.8271; } return false; } - public static double[] gcjToWgs(double gcjLng, double gcjLat) { + public double[] gcjToWgs(double gcjLng, double gcjLat) { if (isOutOfChina(gcjLng, gcjLat)) { return new double[]{gcjLng, gcjLat}; } @@ -141,7 +161,7 @@ return new double[]{gcjLng - dLng, gcjLat - dLat}; } - private static double transformLon(double lng, double lat) { + private double transformLon(double lng, double lat) { double ret = 300.0 + lat + 2.0 * lng + 0.1 * lat * lat + 0.1 * lat * lng + 0.1 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0; @@ -149,7 +169,7 @@ return ret; } - private static double transformLat(double lng, double lat) { + private double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lat + 3.0 * lng + 0.2 * lng * lng + 0.1 * lat * lng + 0.2 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0; diff --git a/app/src/main/java/com/casic/dcms/view/MainActivity.java b/app/src/main/java/com/casic/dcms/view/MainActivity.java index 4f76c3b..87b179b 100644 --- a/app/src/main/java/com/casic/dcms/view/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/MainActivity.java @@ -85,7 +85,7 @@ } else if (msg.what == LocaleConstant.UPDATE_LOCATION) { AMapLocation aMapLocation = (AMapLocation) msg.obj; try { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); positionViewModel.uploadPosition(context, imei, String.valueOf(gcjToWgs[1]), String.valueOf(gcjToWgs[0])); } catch (NullPointerException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java index 8496731..f7827e6 100644 --- a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java @@ -150,7 +150,7 @@ binding.submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -164,7 +164,7 @@ return; } LatLonPoint latLonPoint = new LatLonPoint(aMapLocation.getLatitude(), aMapLocation.getLongitude()); - LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + LocationHelper.get().antiCodingLocation(context, latLonPoint, new IAddressListener() { @Override public void onGetAddress(String address) { Log.d(TAG, "onGetAddress: " + address); diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java index 80fbae2..f34ef34 100644 --- a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -123,7 +123,7 @@ } //设置定位点 - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { @@ -196,7 +196,7 @@ queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 //不管是事件还是部件,都的需要社区信息 - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { if (caseType.equals("事件")) { @@ -207,7 +207,7 @@ }); switch (caseType) { case "部件": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -251,7 +251,7 @@ break; case "三包上报": case "商铺变更": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -439,12 +439,12 @@ binding.mapView.setViewpointScaleAsync(binding.mapView.getMapScale() * 2); } else if (id == R.id.removeToLocalView) { LoadingDialog.show(this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800); diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 3028e00..d2c96a9 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -30,13 +30,28 @@ private static final double pi = 3.14159265358979324; private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 + private final AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + private AMapLocationClient mLocationClient; + + private LocationHelper() { + } + + private static final class LocationHelperHolder { + static final LocationHelper INSTANCE = new LocationHelper(); + } + + /** + * 双重锁单例 + */ + public static LocationHelper get() { + return LocationHelper.LocationHelperHolder.INSTANCE; + } /** * 高德sdk定位 */ - public static void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { - AMapLocationClient mLocationClient = new AMapLocationClient(context); - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + public void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { + mLocationClient = new AMapLocationClient(context); //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(isOnce);//设置是否只定位一次,默认为false @@ -50,10 +65,8 @@ if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { listener.onAMapLocationGet(aMapLocation); -// mLocationClient.stopLocation();//停止定位 } else { listener.onAMapLocationGet(null); - //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e(TAG, "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } @@ -64,10 +77,17 @@ mLocationClient.startLocation(); } + public void stopLocation() { + if (mLocationClient != null) { + mLocationClient.stopLocation(); + Log.d(TAG, "stopLocation: 停止定位"); + } + } + /** * 查询社区信息 */ - public static void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { + public void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); communityFeatureResult.addDoneListener(new Runnable() { @Override @@ -88,7 +108,7 @@ /** * 经纬度反编码为地址 */ - public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + public void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { try { GeocodeSearch codeSearch = new GeocodeSearch(context); // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 @@ -119,14 +139,14 @@ * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ - private static boolean isOutOfChina(double lng, double lat) { + private boolean isOutOfChina(double lng, double lat) { if (lng >= 72.004 && lng <= 137.8347) { return lat >= 0.8293 && lat <= 55.8271; } return false; } - public static double[] gcjToWgs(double gcjLng, double gcjLat) { + public double[] gcjToWgs(double gcjLng, double gcjLat) { if (isOutOfChina(gcjLng, gcjLat)) { return new double[]{gcjLng, gcjLat}; } @@ -141,7 +161,7 @@ return new double[]{gcjLng - dLng, gcjLat - dLat}; } - private static double transformLon(double lng, double lat) { + private double transformLon(double lng, double lat) { double ret = 300.0 + lat + 2.0 * lng + 0.1 * lat * lat + 0.1 * lat * lng + 0.1 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0; @@ -149,7 +169,7 @@ return ret; } - private static double transformLat(double lng, double lat) { + private double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lat + 3.0 * lng + 0.2 * lng * lng + 0.1 * lat * lng + 0.2 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0; diff --git a/app/src/main/java/com/casic/dcms/view/MainActivity.java b/app/src/main/java/com/casic/dcms/view/MainActivity.java index 4f76c3b..87b179b 100644 --- a/app/src/main/java/com/casic/dcms/view/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/MainActivity.java @@ -85,7 +85,7 @@ } else if (msg.what == LocaleConstant.UPDATE_LOCATION) { AMapLocation aMapLocation = (AMapLocation) msg.obj; try { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); positionViewModel.uploadPosition(context, imei, String.valueOf(gcjToWgs[1]), String.valueOf(gcjToWgs[0])); } catch (NullPointerException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java index 8496731..f7827e6 100644 --- a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java @@ -150,7 +150,7 @@ binding.submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -164,7 +164,7 @@ return; } LatLonPoint latLonPoint = new LatLonPoint(aMapLocation.getLatitude(), aMapLocation.getLongitude()); - LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + LocationHelper.get().antiCodingLocation(context, latLonPoint, new IAddressListener() { @Override public void onGetAddress(String address) { Log.d(TAG, "onGetAddress: " + address); diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java index 80fbae2..f34ef34 100644 --- a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -123,7 +123,7 @@ } //设置定位点 - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { @@ -196,7 +196,7 @@ queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 //不管是事件还是部件,都的需要社区信息 - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { if (caseType.equals("事件")) { @@ -207,7 +207,7 @@ }); switch (caseType) { case "部件": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -251,7 +251,7 @@ break; case "三包上报": case "商铺变更": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -439,12 +439,12 @@ binding.mapView.setViewpointScaleAsync(binding.mapView.getMapScale() * 2); } else if (id == R.id.removeToLocalView) { LoadingDialog.show(this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800); diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java index 02e42d3..0c2dcbb 100644 --- a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -95,11 +95,11 @@ @Override public void onClick(View view) { LoadingDialog.show(DisplayMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800.0); diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 3028e00..d2c96a9 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -30,13 +30,28 @@ private static final double pi = 3.14159265358979324; private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 + private final AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + private AMapLocationClient mLocationClient; + + private LocationHelper() { + } + + private static final class LocationHelperHolder { + static final LocationHelper INSTANCE = new LocationHelper(); + } + + /** + * 双重锁单例 + */ + public static LocationHelper get() { + return LocationHelper.LocationHelperHolder.INSTANCE; + } /** * 高德sdk定位 */ - public static void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { - AMapLocationClient mLocationClient = new AMapLocationClient(context); - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + public void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { + mLocationClient = new AMapLocationClient(context); //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(isOnce);//设置是否只定位一次,默认为false @@ -50,10 +65,8 @@ if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { listener.onAMapLocationGet(aMapLocation); -// mLocationClient.stopLocation();//停止定位 } else { listener.onAMapLocationGet(null); - //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e(TAG, "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } @@ -64,10 +77,17 @@ mLocationClient.startLocation(); } + public void stopLocation() { + if (mLocationClient != null) { + mLocationClient.stopLocation(); + Log.d(TAG, "stopLocation: 停止定位"); + } + } + /** * 查询社区信息 */ - public static void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { + public void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); communityFeatureResult.addDoneListener(new Runnable() { @Override @@ -88,7 +108,7 @@ /** * 经纬度反编码为地址 */ - public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + public void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { try { GeocodeSearch codeSearch = new GeocodeSearch(context); // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 @@ -119,14 +139,14 @@ * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ - private static boolean isOutOfChina(double lng, double lat) { + private boolean isOutOfChina(double lng, double lat) { if (lng >= 72.004 && lng <= 137.8347) { return lat >= 0.8293 && lat <= 55.8271; } return false; } - public static double[] gcjToWgs(double gcjLng, double gcjLat) { + public double[] gcjToWgs(double gcjLng, double gcjLat) { if (isOutOfChina(gcjLng, gcjLat)) { return new double[]{gcjLng, gcjLat}; } @@ -141,7 +161,7 @@ return new double[]{gcjLng - dLng, gcjLat - dLat}; } - private static double transformLon(double lng, double lat) { + private double transformLon(double lng, double lat) { double ret = 300.0 + lat + 2.0 * lng + 0.1 * lat * lat + 0.1 * lat * lng + 0.1 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0; @@ -149,7 +169,7 @@ return ret; } - private static double transformLat(double lng, double lat) { + private double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lat + 3.0 * lng + 0.2 * lng * lng + 0.1 * lat * lng + 0.2 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0; diff --git a/app/src/main/java/com/casic/dcms/view/MainActivity.java b/app/src/main/java/com/casic/dcms/view/MainActivity.java index 4f76c3b..87b179b 100644 --- a/app/src/main/java/com/casic/dcms/view/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/MainActivity.java @@ -85,7 +85,7 @@ } else if (msg.what == LocaleConstant.UPDATE_LOCATION) { AMapLocation aMapLocation = (AMapLocation) msg.obj; try { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); positionViewModel.uploadPosition(context, imei, String.valueOf(gcjToWgs[1]), String.valueOf(gcjToWgs[0])); } catch (NullPointerException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java index 8496731..f7827e6 100644 --- a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java @@ -150,7 +150,7 @@ binding.submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -164,7 +164,7 @@ return; } LatLonPoint latLonPoint = new LatLonPoint(aMapLocation.getLatitude(), aMapLocation.getLongitude()); - LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + LocationHelper.get().antiCodingLocation(context, latLonPoint, new IAddressListener() { @Override public void onGetAddress(String address) { Log.d(TAG, "onGetAddress: " + address); diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java index 80fbae2..f34ef34 100644 --- a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -123,7 +123,7 @@ } //设置定位点 - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { @@ -196,7 +196,7 @@ queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 //不管是事件还是部件,都的需要社区信息 - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { if (caseType.equals("事件")) { @@ -207,7 +207,7 @@ }); switch (caseType) { case "部件": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -251,7 +251,7 @@ break; case "三包上报": case "商铺变更": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -439,12 +439,12 @@ binding.mapView.setViewpointScaleAsync(binding.mapView.getMapScale() * 2); } else if (id == R.id.removeToLocalView) { LoadingDialog.show(this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800); diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java index 02e42d3..0c2dcbb 100644 --- a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -95,11 +95,11 @@ @Override public void onClick(View view) { LoadingDialog.show(DisplayMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800.0); diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java index b3667fb..1cb3fc2 100644 --- a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -136,11 +136,11 @@ @Override public void onClick(View view) { LoadingDialog.show(WorkerOnMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(p); binding.mapView.setViewpointCenterAsync(p, 2800.0); diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 3028e00..d2c96a9 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -30,13 +30,28 @@ private static final double pi = 3.14159265358979324; private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 + private final AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + private AMapLocationClient mLocationClient; + + private LocationHelper() { + } + + private static final class LocationHelperHolder { + static final LocationHelper INSTANCE = new LocationHelper(); + } + + /** + * 双重锁单例 + */ + public static LocationHelper get() { + return LocationHelper.LocationHelperHolder.INSTANCE; + } /** * 高德sdk定位 */ - public static void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { - AMapLocationClient mLocationClient = new AMapLocationClient(context); - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + public void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { + mLocationClient = new AMapLocationClient(context); //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(isOnce);//设置是否只定位一次,默认为false @@ -50,10 +65,8 @@ if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { listener.onAMapLocationGet(aMapLocation); -// mLocationClient.stopLocation();//停止定位 } else { listener.onAMapLocationGet(null); - //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e(TAG, "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } @@ -64,10 +77,17 @@ mLocationClient.startLocation(); } + public void stopLocation() { + if (mLocationClient != null) { + mLocationClient.stopLocation(); + Log.d(TAG, "stopLocation: 停止定位"); + } + } + /** * 查询社区信息 */ - public static void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { + public void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); communityFeatureResult.addDoneListener(new Runnable() { @Override @@ -88,7 +108,7 @@ /** * 经纬度反编码为地址 */ - public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + public void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { try { GeocodeSearch codeSearch = new GeocodeSearch(context); // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 @@ -119,14 +139,14 @@ * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ - private static boolean isOutOfChina(double lng, double lat) { + private boolean isOutOfChina(double lng, double lat) { if (lng >= 72.004 && lng <= 137.8347) { return lat >= 0.8293 && lat <= 55.8271; } return false; } - public static double[] gcjToWgs(double gcjLng, double gcjLat) { + public double[] gcjToWgs(double gcjLng, double gcjLat) { if (isOutOfChina(gcjLng, gcjLat)) { return new double[]{gcjLng, gcjLat}; } @@ -141,7 +161,7 @@ return new double[]{gcjLng - dLng, gcjLat - dLat}; } - private static double transformLon(double lng, double lat) { + private double transformLon(double lng, double lat) { double ret = 300.0 + lat + 2.0 * lng + 0.1 * lat * lat + 0.1 * lat * lng + 0.1 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0; @@ -149,7 +169,7 @@ return ret; } - private static double transformLat(double lng, double lat) { + private double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lat + 3.0 * lng + 0.2 * lng * lng + 0.1 * lat * lng + 0.2 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0; diff --git a/app/src/main/java/com/casic/dcms/view/MainActivity.java b/app/src/main/java/com/casic/dcms/view/MainActivity.java index 4f76c3b..87b179b 100644 --- a/app/src/main/java/com/casic/dcms/view/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/MainActivity.java @@ -85,7 +85,7 @@ } else if (msg.what == LocaleConstant.UPDATE_LOCATION) { AMapLocation aMapLocation = (AMapLocation) msg.obj; try { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); positionViewModel.uploadPosition(context, imei, String.valueOf(gcjToWgs[1]), String.valueOf(gcjToWgs[0])); } catch (NullPointerException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java index 8496731..f7827e6 100644 --- a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java @@ -150,7 +150,7 @@ binding.submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -164,7 +164,7 @@ return; } LatLonPoint latLonPoint = new LatLonPoint(aMapLocation.getLatitude(), aMapLocation.getLongitude()); - LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + LocationHelper.get().antiCodingLocation(context, latLonPoint, new IAddressListener() { @Override public void onGetAddress(String address) { Log.d(TAG, "onGetAddress: " + address); diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java index 80fbae2..f34ef34 100644 --- a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -123,7 +123,7 @@ } //设置定位点 - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { @@ -196,7 +196,7 @@ queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 //不管是事件还是部件,都的需要社区信息 - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { if (caseType.equals("事件")) { @@ -207,7 +207,7 @@ }); switch (caseType) { case "部件": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -251,7 +251,7 @@ break; case "三包上报": case "商铺变更": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -439,12 +439,12 @@ binding.mapView.setViewpointScaleAsync(binding.mapView.getMapScale() * 2); } else if (id == R.id.removeToLocalView) { LoadingDialog.show(this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800); diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java index 02e42d3..0c2dcbb 100644 --- a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -95,11 +95,11 @@ @Override public void onClick(View view) { LoadingDialog.show(DisplayMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800.0); diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java index b3667fb..1cb3fc2 100644 --- a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -136,11 +136,11 @@ @Override public void onClick(View view) { LoadingDialog.show(WorkerOnMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(p); binding.mapView.setViewpointCenterAsync(p, 2800.0); diff --git a/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java index c09dbc8..c2e5251 100644 --- a/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java @@ -226,12 +226,12 @@ //Marker相关Layer graphicsOverlays = binding.mapView.getGraphicsOverlays(); //显示定位点附近路灯 - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); binding.mapView.setViewpointCenterAsync(point, 2800); @@ -278,12 +278,12 @@ // minusList.add(new Point(longitude, latitude, SpatialReferences.getWgs84())); // } // addPictureMarker(minusList); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); List minusList = new ArrayList<>(); for (LightLocalBean bean : lightLocalBeanDao.loadAll()) { @@ -321,12 +321,12 @@ // expandList.add(new Point(longitude, latitude, SpatialReferences.getWgs84())); // } // addPictureMarker(expandList); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); List expandList = new ArrayList<>(); for (LightLocalBean bean : lightLocalBeanDao.loadAll()) { @@ -348,12 +348,12 @@ public void onClick(View v) { clearPictureMarker(); LoadingDialog.show(LightOnMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); List pointList = new ArrayList<>(); for (LightLocalBean bean : lightLocalBeanDao.loadAll()) { diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 3028e00..d2c96a9 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -30,13 +30,28 @@ private static final double pi = 3.14159265358979324; private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 + private final AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + private AMapLocationClient mLocationClient; + + private LocationHelper() { + } + + private static final class LocationHelperHolder { + static final LocationHelper INSTANCE = new LocationHelper(); + } + + /** + * 双重锁单例 + */ + public static LocationHelper get() { + return LocationHelper.LocationHelperHolder.INSTANCE; + } /** * 高德sdk定位 */ - public static void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { - AMapLocationClient mLocationClient = new AMapLocationClient(context); - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + public void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { + mLocationClient = new AMapLocationClient(context); //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(isOnce);//设置是否只定位一次,默认为false @@ -50,10 +65,8 @@ if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { listener.onAMapLocationGet(aMapLocation); -// mLocationClient.stopLocation();//停止定位 } else { listener.onAMapLocationGet(null); - //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e(TAG, "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } @@ -64,10 +77,17 @@ mLocationClient.startLocation(); } + public void stopLocation() { + if (mLocationClient != null) { + mLocationClient.stopLocation(); + Log.d(TAG, "stopLocation: 停止定位"); + } + } + /** * 查询社区信息 */ - public static void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { + public void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); communityFeatureResult.addDoneListener(new Runnable() { @Override @@ -88,7 +108,7 @@ /** * 经纬度反编码为地址 */ - public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + public void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { try { GeocodeSearch codeSearch = new GeocodeSearch(context); // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 @@ -119,14 +139,14 @@ * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ - private static boolean isOutOfChina(double lng, double lat) { + private boolean isOutOfChina(double lng, double lat) { if (lng >= 72.004 && lng <= 137.8347) { return lat >= 0.8293 && lat <= 55.8271; } return false; } - public static double[] gcjToWgs(double gcjLng, double gcjLat) { + public double[] gcjToWgs(double gcjLng, double gcjLat) { if (isOutOfChina(gcjLng, gcjLat)) { return new double[]{gcjLng, gcjLat}; } @@ -141,7 +161,7 @@ return new double[]{gcjLng - dLng, gcjLat - dLat}; } - private static double transformLon(double lng, double lat) { + private double transformLon(double lng, double lat) { double ret = 300.0 + lat + 2.0 * lng + 0.1 * lat * lat + 0.1 * lat * lng + 0.1 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0; @@ -149,7 +169,7 @@ return ret; } - private static double transformLat(double lng, double lat) { + private double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lat + 3.0 * lng + 0.2 * lng * lng + 0.1 * lat * lng + 0.2 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0; diff --git a/app/src/main/java/com/casic/dcms/view/MainActivity.java b/app/src/main/java/com/casic/dcms/view/MainActivity.java index 4f76c3b..87b179b 100644 --- a/app/src/main/java/com/casic/dcms/view/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/MainActivity.java @@ -85,7 +85,7 @@ } else if (msg.what == LocaleConstant.UPDATE_LOCATION) { AMapLocation aMapLocation = (AMapLocation) msg.obj; try { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); positionViewModel.uploadPosition(context, imei, String.valueOf(gcjToWgs[1]), String.valueOf(gcjToWgs[0])); } catch (NullPointerException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java index 8496731..f7827e6 100644 --- a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java @@ -150,7 +150,7 @@ binding.submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -164,7 +164,7 @@ return; } LatLonPoint latLonPoint = new LatLonPoint(aMapLocation.getLatitude(), aMapLocation.getLongitude()); - LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + LocationHelper.get().antiCodingLocation(context, latLonPoint, new IAddressListener() { @Override public void onGetAddress(String address) { Log.d(TAG, "onGetAddress: " + address); diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java index 80fbae2..f34ef34 100644 --- a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -123,7 +123,7 @@ } //设置定位点 - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { @@ -196,7 +196,7 @@ queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 //不管是事件还是部件,都的需要社区信息 - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { if (caseType.equals("事件")) { @@ -207,7 +207,7 @@ }); switch (caseType) { case "部件": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -251,7 +251,7 @@ break; case "三包上报": case "商铺变更": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -439,12 +439,12 @@ binding.mapView.setViewpointScaleAsync(binding.mapView.getMapScale() * 2); } else if (id == R.id.removeToLocalView) { LoadingDialog.show(this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800); diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java index 02e42d3..0c2dcbb 100644 --- a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -95,11 +95,11 @@ @Override public void onClick(View view) { LoadingDialog.show(DisplayMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800.0); diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java index b3667fb..1cb3fc2 100644 --- a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -136,11 +136,11 @@ @Override public void onClick(View view) { LoadingDialog.show(WorkerOnMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(p); binding.mapView.setViewpointCenterAsync(p, 2800.0); diff --git a/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java index c09dbc8..c2e5251 100644 --- a/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java @@ -226,12 +226,12 @@ //Marker相关Layer graphicsOverlays = binding.mapView.getGraphicsOverlays(); //显示定位点附近路灯 - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); binding.mapView.setViewpointCenterAsync(point, 2800); @@ -278,12 +278,12 @@ // minusList.add(new Point(longitude, latitude, SpatialReferences.getWgs84())); // } // addPictureMarker(minusList); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); List minusList = new ArrayList<>(); for (LightLocalBean bean : lightLocalBeanDao.loadAll()) { @@ -321,12 +321,12 @@ // expandList.add(new Point(longitude, latitude, SpatialReferences.getWgs84())); // } // addPictureMarker(expandList); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); List expandList = new ArrayList<>(); for (LightLocalBean bean : lightLocalBeanDao.loadAll()) { @@ -348,12 +348,12 @@ public void onClick(View v) { clearPictureMarker(); LoadingDialog.show(LightOnMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); List pointList = new ArrayList<>(); for (LightLocalBean bean : lightLocalBeanDao.loadAll()) { diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 9e887d3..d6e5ca8 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -184,7 +184,7 @@ return; } LatLonPoint latLonPoint = new LatLonPoint(Double.parseDouble(lat), Double.parseDouble(lng)); - LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + LocationHelper.get().antiCodingLocation(context, latLonPoint, new IAddressListener() { @Override public void onGetAddress(String address) { viewHolder.setText(R.id.workerPositionView, address); diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index bb534a3..250be35 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -25,6 +25,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.NewVersionBean; import com.casic.dcms.model.UserBean; +import com.casic.dcms.service.UpdateLocationService; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.PictureSelectorHelper; @@ -85,6 +86,7 @@ userViewModel.loginOutResult.observe(this, new Observer() { @Override public void onChanged(ActionResultBean actionResultBean) { + requireActivity().stopService(new Intent(requireContext(), UpdateLocationService.class)); AuthenticationHelper.removeToken(); ContextKit.navigatePageTo(requireContext(), LoginActivity.class); ActivityStackManager.finishAllActivity(); diff --git a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java index c253c77..1a79128 100644 --- a/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UpdateLocationService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -54,7 +55,7 @@ Notification notification = notificationBuilder.build(); startForeground(notificationId, notification); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -101,7 +102,9 @@ @Override public void onDestroy() { super.onDestroy(); + LocationHelper.get().stopLocation(); updateHandler.removeCallbacksAndMessages(null); stopForeground(STOP_FOREGROUND_REMOVE); + Log.d(TAG, "onDestroy: 停止后台定位服务"); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 3028e00..d2c96a9 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -30,13 +30,28 @@ private static final double pi = 3.14159265358979324; private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 + private final AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + private AMapLocationClient mLocationClient; + + private LocationHelper() { + } + + private static final class LocationHelperHolder { + static final LocationHelper INSTANCE = new LocationHelper(); + } + + /** + * 双重锁单例 + */ + public static LocationHelper get() { + return LocationHelper.LocationHelperHolder.INSTANCE; + } /** * 高德sdk定位 */ - public static void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { - AMapLocationClient mLocationClient = new AMapLocationClient(context); - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + public void getCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { + mLocationClient = new AMapLocationClient(context); //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(isOnce);//设置是否只定位一次,默认为false @@ -50,10 +65,8 @@ if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { listener.onAMapLocationGet(aMapLocation); -// mLocationClient.stopLocation();//停止定位 } else { listener.onAMapLocationGet(null); - //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e(TAG, "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } @@ -64,10 +77,17 @@ mLocationClient.startLocation(); } + public void stopLocation() { + if (mLocationClient != null) { + mLocationClient.stopLocation(); + Log.d(TAG, "stopLocation: 停止定位"); + } + } + /** * 查询社区信息 */ - public static void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { + public void getCurrentCommunity(FeatureLayer communityLayer, QueryParameters queryParameters, ICommunityListener listener) { ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); communityFeatureResult.addDoneListener(new Runnable() { @Override @@ -88,7 +108,7 @@ /** * 经纬度反编码为地址 */ - public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + public void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { try { GeocodeSearch codeSearch = new GeocodeSearch(context); // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 @@ -119,14 +139,14 @@ * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ - private static boolean isOutOfChina(double lng, double lat) { + private boolean isOutOfChina(double lng, double lat) { if (lng >= 72.004 && lng <= 137.8347) { return lat >= 0.8293 && lat <= 55.8271; } return false; } - public static double[] gcjToWgs(double gcjLng, double gcjLat) { + public double[] gcjToWgs(double gcjLng, double gcjLat) { if (isOutOfChina(gcjLng, gcjLat)) { return new double[]{gcjLng, gcjLat}; } @@ -141,7 +161,7 @@ return new double[]{gcjLng - dLng, gcjLat - dLat}; } - private static double transformLon(double lng, double lat) { + private double transformLon(double lng, double lat) { double ret = 300.0 + lat + 2.0 * lng + 0.1 * lat * lat + 0.1 * lat * lng + 0.1 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0; @@ -149,7 +169,7 @@ return ret; } - private static double transformLat(double lng, double lat) { + private double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lat + 3.0 * lng + 0.2 * lng * lng + 0.1 * lat * lng + 0.2 * Math.sqrt(Math.abs(lat)); ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0; diff --git a/app/src/main/java/com/casic/dcms/view/MainActivity.java b/app/src/main/java/com/casic/dcms/view/MainActivity.java index 4f76c3b..87b179b 100644 --- a/app/src/main/java/com/casic/dcms/view/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/MainActivity.java @@ -85,7 +85,7 @@ } else if (msg.what == LocaleConstant.UPDATE_LOCATION) { AMapLocation aMapLocation = (AMapLocation) msg.obj; try { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); positionViewModel.uploadPosition(context, imei, String.valueOf(gcjToWgs[1]), String.valueOf(gcjToWgs[0])); } catch (NullPointerException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java index 8496731..f7827e6 100644 --- a/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java +++ b/app/src/main/java/com/casic/dcms/view/bridge/BridgeMaintainActivity.java @@ -150,7 +150,7 @@ binding.submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -164,7 +164,7 @@ return; } LatLonPoint latLonPoint = new LatLonPoint(aMapLocation.getLatitude(), aMapLocation.getLongitude()); - LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + LocationHelper.get().antiCodingLocation(context, latLonPoint, new IAddressListener() { @Override public void onGetAddress(String address) { Log.d(TAG, "onGetAddress: " + address); diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java index 80fbae2..f34ef34 100644 --- a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -123,7 +123,7 @@ } //设置定位点 - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { @@ -196,7 +196,7 @@ queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 //不管是事件还是部件,都的需要社区信息 - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { if (caseType.equals("事件")) { @@ -207,7 +207,7 @@ }); switch (caseType) { case "部件": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -251,7 +251,7 @@ break; case "三包上报": case "商铺变更": - LocationHelper.getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + LocationHelper.get().getCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { @Override public void onCommunityFeatureGet(Feature feature) { //先取社区信息,再取部件信息 @@ -439,12 +439,12 @@ binding.mapView.setViewpointScaleAsync(binding.mapView.getMapScale() * 2); } else if (id == R.id.removeToLocalView) { LoadingDialog.show(this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800); diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java index 02e42d3..0c2dcbb 100644 --- a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -95,11 +95,11 @@ @Override public void onClick(View view) { LoadingDialog.show(DisplayMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(point); binding.mapView.setViewpointCenterAsync(point, 2800.0); diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java index b3667fb..1cb3fc2 100644 --- a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -136,11 +136,11 @@ @Override public void onClick(View view) { LoadingDialog.show(WorkerOnMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); addPictureMarker(p); binding.mapView.setViewpointCenterAsync(p, 2800.0); diff --git a/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java index c09dbc8..c2e5251 100644 --- a/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/view/streetlight/LightOnMapActivity.java @@ -226,12 +226,12 @@ //Marker相关Layer graphicsOverlays = binding.mapView.getGraphicsOverlays(); //显示定位点附近路灯 - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); binding.mapView.setViewpointCenterAsync(point, 2800); @@ -278,12 +278,12 @@ // minusList.add(new Point(longitude, latitude, SpatialReferences.getWgs84())); // } // addPictureMarker(minusList); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); List minusList = new ArrayList<>(); for (LightLocalBean bean : lightLocalBeanDao.loadAll()) { @@ -321,12 +321,12 @@ // expandList.add(new Point(longitude, latitude, SpatialReferences.getWgs84())); // } // addPictureMarker(expandList); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); List expandList = new ArrayList<>(); for (LightLocalBean bean : lightLocalBeanDao.loadAll()) { @@ -348,12 +348,12 @@ public void onClick(View v) { clearPictureMarker(); LoadingDialog.show(LightOnMapActivity.this, "定位中,请稍后"); - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); List pointList = new ArrayList<>(); for (LightLocalBean bean : lightLocalBeanDao.loadAll()) { diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 9e887d3..d6e5ca8 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -184,7 +184,7 @@ return; } LatLonPoint latLonPoint = new LatLonPoint(Double.parseDouble(lat), Double.parseDouble(lng)); - LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + LocationHelper.get().antiCodingLocation(context, latLonPoint, new IAddressListener() { @Override public void onGetAddress(String address) { viewHolder.setText(R.id.workerPositionView, address); diff --git a/app/src/main/java/com/casic/dcms/view/toilet/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/PublicToiletActivity.java index 406423c..abe6596 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/PublicToiletActivity.java @@ -91,7 +91,7 @@ String systemTime = LongKit.timestampToCompleteDate(System.currentTimeMillis()); //默认显示结束时间 binding.endTimeView.setText(systemTime); - LocationHelper.getCurrentLocation(this, new ILocationListener() { + LocationHelper.get().getCurrentLocation(this, new ILocationListener() { @SuppressLint("SetTextI18n") @Override public void onAMapLocationGet(AMapLocation aMapLocation) { @@ -99,7 +99,7 @@ binding.locationStreetView.setText("定位失败"); binding.locationStreetView.setTextColor(Color.RED); } else { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); binding.mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker @@ -280,13 +280,13 @@ binding.signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - LocationHelper.getCurrentLocation(context, new ILocationListener() { + LocationHelper.get().getCurrentLocation(context, new ILocationListener() { @SuppressLint("SetTextI18n") @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + double[] gcjToWgs = LocationHelper.get().gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); binding.mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker