Извлечь местоположение из android в фоновом режиме во флаттере - PullRequest
0 голосов
/ 27 февраля 2020

Я использую код ниже, чтобы отслеживать местоположение пользователя. Это работает правильно, когда мое приложение на переднем плане. Но когда мое приложение переходит в фоновый режим, оно перестает работать, и я не могу найти местоположение.

import 'dart:async';
import 'package:permission_handler/permission_handler.dart';
import 'package:geolocator/geolocator.dart';

class FetchLocation   {
  var geolocator = Geolocator();
  var locationOptions = LocationOptions(accuracy: LocationAccuracy.high, distanceFilter: 10,forceAndroidLocationManager: true,timeInterval: 1);
  void trackGeoLocation()async{
    final PermissionStatus permission = await PermissionHandler()
        .checkPermissionStatus(PermissionGroup.location);
      if(permission == PermissionStatus.granted){
        fetchLocation();
      }else{
        askPermission();
      }

  }
  void askPermission() {
    PermissionHandler().requestPermissions([PermissionGroup.locationAlways]).then(__onStatusRequested);
  }
  void __onStatusRequested(Map<PermissionGroup, PermissionStatus> statuses){
    final status = statuses[PermissionGroup.locationWhenInUse];

    print(status);
    if(status == PermissionStatus.restricted || status == PermissionStatus.neverAskAgain){
    } else if(status == PermissionStatus.denied){
      askPermission();
    }else{
      fetchLocation();
    }
  }
  void fetchLocation(){
    StreamSubscription<Position> positionStream = geolocator.getPositionStream(locationOptions).listen(
            (Position position) {
          print(position == null ? 'Unknown' : position.latitude.toString() + ', ' + position.longitude.toString());
        });
  }
}

1 Ответ

2 голосов
/ 27 февраля 2020

Возможно, вам мешают ограничения, введенные с Android 8 (API 26), который ограничивает частоту, с которой фоновые приложения могут извлекать текущее местоположение.

Это было введено для экономии заряда батареи, но это означает, что вам нужно иметь видимое уведомление, чтобы Android мог считать приложение находящимся на переднем плане. В противном случае он будет извлекать местоположение только несколько раз в час, пока приложение находится в фоновом режиме.

https://developer.android.com/about/versions/oreo/background-location-limits дает вам дополнительную дополнительную информацию (извините за каламбур).

...