我想为我的 Flutter App 添加后台位置服务功能。
我想以特定的时间间隔获取位置更新,我必须每 N 分钟发送一次位置更新纬度和经度,那么如果应用程序关闭、打开或在后台,我该如何做到这一点?
我需要发送位置更新详细信息才能调用 API。 那么请帮助我如何做到这一点以及我应该使用什么包?
在您的应用程序中创建服务。您可以使用以下代码进行定位服务。
import 'package:location/location.dart';
class LocationService {
UserLocation _currentLocation;
var location = Location();
//One off location
Future<UserLocation> getLocation() async {
try {
var userLocation = await location.getLocation();
_currentLocation = UserLocation(
latitude: userLocation.latitude,
longitude: userLocation.longitude,
);
} on Exception catch (e) {
print('Could not get location: ${e.toString()}');
}
return _currentLocation;
}
//Stream that emits all user location updates to you
StreamController<UserLocation> _locationController =
StreamController<UserLocation>();
Stream<UserLocation> get locationStream => _locationController.stream;
LocationService() {
// Request permission to use location
location.requestPermission().then((granted) {
if (granted) {
// If granted listen to the onLocationChanged stream and emit over our controller
location.onLocationChanged().listen((locationData) {
if (locationData != null) {
_locationController.add(UserLocation(
latitude: locationData.latitude,
longitude: locationData.longitude,
));
}
});
}
});
}
}
用户位置模型:
class UserLocation {
final double latitude;
final double longitude;
final double heading;
UserLocation({required this.heading, required this.latitude, required this.longitude});
}
然后在您的页面/视图 init 函数中,启动计时器并将位置更新为您使用的位置 API 或 Firebase。
Timer? locationUpdateTimer;
locationUpdateTimer = Timer.periodic(const Duration(seconds: 60), (Timer t) {
updateLocationToServer();
});
如果不使用计时器,请记得将其丢弃。
当应用程序运行或在后台时,这将每 60 秒更新一次位置。在应用程序终止时更新位置有点复杂,但有一个包会每 15 秒唤醒您的应用程序。您可以通过以下链接查看有关如何实现此目的的文档:
我开发了用于在后台跟踪位置的代码,即使应用程序被杀死,它适用于 Android 平台。
您可以查看此媒体博客,即使在向应用程序请求权限后也可以运行代码。
请查看并告诉我它是否适合您。
谢谢...