我试图在应用程序被终止时跟踪用户的位置,并将该位置(纬度和经度)发送到 Flutter 中的数据库(Firestore)。
我是新手,所以我不知道该怎么做。如果有人能在这方面帮助我,我将不胜感激。
非常感谢!!
应用程序在后台运行时可以获取设备的位置数据。您提到,即使应用程序被杀死,您也希望实现这一目标 - 通过“杀死”,如果您的意思是在 Android 中强制停止后获取位置数据,那么这是不可能的。
如果您想在应用程序在后台运行时获取用户数据,您可以使用 geolocator 插件。尽管这样做会涉及隐私,并且您需要请求用户的许可。权限请求内置于
geolocator
插件中。
LocationPermission permission;
permission = await Geolocator.checkPermission();
此后,您可以收听流并使用您想要存储位置数据的方式更新代码片段。
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。
创建一个用于运行任务的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());
}