如果应用程序关闭,如何在我的 Flutter 应用程序中设置后台位置更新?

问题描述 投票:0回答:2

我想为我的 Flutter App 添加后台位置服务功能。

我想以特定的时间间隔获取位置更新,我必须每 N 分钟发送一次位置更新纬度和经度,那么如果应用程序关闭、打开或在后台,我该如何做到这一点?

我需要发送位置更新详细信息才能调用 API。 那么请帮助我如何做到这一点以及我应该使用什么包?

flutter
2个回答
1
投票

在您的应用程序中创建服务。您可以使用以下代码进行定位服务。

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 秒唤醒您的应用程序。您可以通过以下链接查看有关如何实现此目的的文档:

https://pub.dev/packages/background_fetch


0
投票

我开发了用于在后台跟踪位置的代码,即使应用程序被杀死,它适用于 Android 平台。

您可以查看此媒体博客,即使在向应用程序请求权限后也可以运行代码。

https://medium.com/@jaypanchal4498/fetching-location-even-after-app-killed-is-possible-using-flutter-this-is-how-i-did-it-ea9ecb738bdd

请查看并告诉我它是否适合您。

谢谢...

© www.soinside.com 2019 - 2024. All rights reserved.