A Flutter plugin to get location updates in the background for both Android and iOS (Requires iOS 10.0+). Uses CoreLocation
for iOS and FusedLocationProvider
for Android
1: Add this to your package's pubspec.yaml file:
dependencies:
background_location: ^0.9.0
2: Install packages from the command line:
$ flutter packages get
Alternatively, your editor might support flutter packages get. Check the docs for your editor to learn more.
Import the package where you wanna use it.
import 'package:background_location/background_location.dart';
Request permissions from the user. You can use permission_handler for this
Set the notification title, message and icon (Android only). Use await
or .then
if you wanna start the location service immediatly after becuase its an asynchronous method
BackgroundLocation.setAndroidNotification(
title: "Notification title",
message: "Notification message",
icon: "@mipmap/ic_launcher",
);
Set the interval between localisations in milliseconds (Android only). Use await
or .then
if you wanna start the location service immediatly after becuase its an asynchronous method
BackgroundLocation.setAndroidConfiguration(1000);
Start the location service. This will also ask the user for permission if not asked previously by another package.
BackgroundLocation.startLocationService();
Start location service by specifying distanceFilter
. Defaults to 0
if not specified
BackgroundLocation.startLocationService(distanceFilter : 10);
You can also force the use of Android LocationManager
instead of Google's FusedLocationProvider
by setting the forceAndroidLocationManager
property to true
. If not specified, this defaults to false
, which uses FusedLocationProvider
if it is available, treating LocationManager
as a fallback. This setting has no effect on iOS devices.
BackgroundLocation.startLocationService(forceAndroidLocationManager: true);
getLocationUpdates
will trigger everytime the location updates on the device. Provide a callback function to getLocationUpdates
to handle location update.
BackgroundLocation.getLocationUpdates((location) {
print(location);
});
location is a Class
exposing the following properties.
double latitude;
double longitude;
double altitude;
double bearing;
double accuracy;
double speed;
double time;
bool isMock;
To stop listening to location changes you can execute.
BackgroundLocation.stopLocationService();
Make sure to delcare all required permissions for both your android and ios app
info.plist
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs access to location.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location.</string>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>location</string>
</array>
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>