Ver código fonte

[new]调整为进入首页再开始定位

zk 3 meses atrás
pai
commit
b92c105584

+ 1 - 0
lib/module/main/main_controller.dart

@@ -120,6 +120,7 @@ class MainController extends BaseController {
   @override
   void onReady() {
     super.onReady();
+    MapHelper.checkPermissionStartLocation();
     InternetConnectionHelper.getInstance().startInternetConnection();
     InternetConnectionHelper.getInstance().startListenNetwork();
 

+ 9 - 1
lib/sdk/map/map_helper.dart

@@ -1,5 +1,7 @@
 import 'package:flutter_map/flutter_map.dart';
 import 'package:location/socket/atmob_location_client.dart';
+import 'package:location/utils/permission_util.dart';
+import 'package:location/utils/toast_util.dart';
 import '../../utils/atmob_log.dart';
 
 class MapHelper {
@@ -13,7 +15,7 @@ class MapHelper {
 
   static Future<void> init() async {
     await FlutterMap.init();
-    _initLocationClient(); 
+    _initLocationClient();
   }
 
   static void _initLocationClient() {
@@ -39,6 +41,12 @@ class MapHelper {
     return FlutterMap.startLocation();
   }
 
+  static Future<void> checkPermissionStartLocation() async {
+    if (await PermissionUtil.checkLocationPermission()) {
+      startLocation();
+    }
+  }
+
   static MapLocation? getLastLocation() {
     return _lastLocation;
   }

+ 1 - 1
plugins/map/lib/src/entity/map_location.dart

@@ -61,6 +61,6 @@ class MapLocation implements Codable {
 
   @override
   String toString() {
-    return 'MapLocation{time: $time, address: $address, latitude: $latitude, longitude: $longitude, errorCode: $errorCode, speed: $speed, bearing: $bearing}';
+    return '{time: $time, address: $address, latitude: $latitude, longitude: $longitude, errorCode: $errorCode, speed: $speed, bearing: $bearing}';
   }
 }

+ 2 - 2
plugins/map_amap_android/android/src/main/java/com/atmob/map_amap_android/FlutterLocationEventPlugin.java

@@ -36,7 +36,7 @@ public class FlutterLocationEventPlugin implements FlutterPlugin, EventChannel.S
         AMapHelper.removeOnLocationListener(this);
         eventChannel = null;
         eventSink = null;
-        locationMap.clear();
+        if (locationMap != null) locationMap.clear();
         locationMap = null;
     }
 
@@ -48,7 +48,7 @@ public class FlutterLocationEventPlugin implements FlutterPlugin, EventChannel.S
     @Override
     public void onCancel(Object o) {
         eventSink = null;
-        locationMap.clear();
+        if (locationMap != null) locationMap.clear();
         locationMap = null;
     }
 

+ 22 - 36
plugins/map_amap_android/android/src/main/java/com/atmob/map_amap_android/util/AMapHelper.java

@@ -24,11 +24,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 public class AMapHelper {
     private static final String TAG = "AMapHelper";
-    public static final String KEY_LAST_TRACK_ID = "amap_last_track_id";
     private static final int AMAP_NOTIFICATION_ID = 350;
     private static final String AMAP_NOTIFICATION_CHANNEL_ID = "amap_notification_channel_id";
     private static final String AMAP_NOTIFICATION_CHANNEL_NAME = "Location Tracking";
-    private static final AtomicBoolean isLocationInit = new AtomicBoolean(false);
     private static final ArrayList<OnLocationListener> locationListeners = new ArrayList<>();
     private static AMapLocation lastLocation;
     @SuppressLint("StaticFieldLeak")
@@ -38,48 +36,36 @@ public class AMapHelper {
             Manifest.permission.ACCESS_COARSE_LOCATION
     };
 
-    public static void init(Context context) {
-        if (ProcessUtil.isMainProcess(context)) {
-            initLocation(context);
-        }
-    }
-
-    private static void initLocation(Context context) {
-        if (isLocationInit.compareAndSet(false, true)) {
-            try {
-                LogUtil.d(TAG, "amap ... initLocation...");
-                AMapLocationClient.updatePrivacyShow(context, true, true);
-                AMapLocationClient.updatePrivacyAgree(context, true);
-                aMapLocationClient = new AMapLocationClient(context);
-                aMapLocationClient.setLocationOption(new AMapLocationClientOption().setInterval(5000));
-                aMapLocationClient.setLocationListener(aMapLocation -> {
-                    if (aMapLocation != null) {
-                        if (aMapLocation.getErrorCode() == 0) {
-                            lastLocation = aMapLocation;
-                            LogUtil.d(TAG, "onLocationChanged: " + aMapLocation);
-                            for (OnLocationListener locationListener : locationListeners) {
-                                locationListener.onLocationChanged(aMapLocation);
-                            }
-                        }
+    public static void init(Context context) throws Exception {
+        LogUtil.d(TAG, "amap ... initLocation...");
+        AMapLocationClient.updatePrivacyShow(context, true, true);
+        AMapLocationClient.updatePrivacyAgree(context, true);
+        aMapLocationClient = new AMapLocationClient(context);
+        aMapLocationClient.setLocationOption(new AMapLocationClientOption().setInterval(5000));
+        aMapLocationClient.setLocationListener(aMapLocation -> {
+            if (aMapLocation != null) {
+                if (aMapLocation.getErrorCode() == 0) {
+                    lastLocation = aMapLocation;
+                    LogUtil.d(TAG, "onLocationChanged: " + aMapLocation);
+                    for (OnLocationListener locationListener : locationListeners) {
+                        locationListener.onLocationChanged(aMapLocation);
                     }
-                });
-                if (PermissionUtil.hasPermission(context, LOCATION_PERMISSION)) {
-                    aMapLocationClient.startLocation();
-                    aMapLocationClient.enableBackgroundLocation(AMAP_NOTIFICATION_ID, createLocationNotification(context));
                 }
-            } catch (Exception e) {
-                isLocationInit.set(false);
-                LogUtil.e(TAG, "initLocation failed.", e);
             }
-        }
+        });
     }
 
     public static void startLocation(Context context) {
-        if (isLocationInit.get()) {
+        if (aMapLocationClient == null) {
+            throw new IllegalStateException("AMapLocationClient is not initialized. Call init() first.");
+        }
+        if (PermissionUtil.hasPermission(context, LOCATION_PERMISSION)) {
+            LogUtil.d(TAG, "startLocation...");
             aMapLocationClient.startLocation();
             aMapLocationClient.enableBackgroundLocation(AMAP_NOTIFICATION_ID, createLocationNotification(context));
-        } else {
-            initLocation(context);
+        }else{
+            LogUtil.w(TAG, "startLocation: No location permission granted.");
+            throw new SecurityException("Location permissions are required to start location tracking.");
         }
     }