flutter 当应用程序被终止时,是否可以跟踪用户的位置(抖动)

0tdrvxhp  于 2022-12-14  发布在  Flutter
关注(0)|答案(1)|浏览(155)

我试图跟踪用户的位置时,应用程序被杀死,并发送该位置(纬度和经度)的数据库(Firestore)在Flutter。
我是一个新手,所以我不知道如何做这件事。如果有人能在这件事上帮助我,我将不胜感激。
非常感谢!

jdgnovmf

jdgnovmf1#

当应用程序在后台运行时,获取设备的位置数据是可能的。您提到,即使应用程序被杀死,您也希望实现这一点-如果您在这里指的是在Android中被强制停止后获取位置数据,那么这是不可能的。
如果你想在应用后台运行时获取用户数据,你可以使用geolocator插件。尽管这样做会影响隐私,但你需要向用户请求权限。权限请求内置在geolocator插件中。

LocationPermission permission;

permission = await Geolocator.checkPermission();

在此之后,您可以侦听Stream并使用您希望存储位置数据的方式更新代码片段。

import 'package:geolocator/geolocator.dart';

final LocationSettings locationSettings = LocationSettings(accuracy: LocationAccuracy.best);

StreamSubscription<Position> positionStream = Geolocator.getPositionStream(locationSettings: locationSettings).listen(
    (Position? position) {
    print(position == null ? 'Unknown' : '${position.latitude.toString()}, ${position.longitude.toString()}');
    // Store geolocation data
});

若要在后台运行任务,即使应用未在前台运行,您也可以使用workmanager
创建一个用于运行任务的工作管理器,并在Flutter项目的main.dart上对其进行初始化。

void locationHandler() {
  Workmanager().executeTask((_) {
    print('background task running'); 
    
    // Fetch device location data
  });
}

void main() {
  Workmanager().initialize(
    locationHandler, // The top level function, aka callbackDispatcher
    isInDebugMode: true // If enabled it will post a notification whenever the task is running. Handy for debugging tasks
  );
  Workmanager().registerOneOffTask('yourTaskName', 'yourTaskNameDescription);
  runApp(MyApp());
}

相关问题