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.5.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.
BackgroundLocation.getPermissions(
onGranted: () {
// Start location service here or do something else
},
onDenied: () {
// Show a message asking the user to reconsider or do something else
},
);
You can check if you have permissions at anytime with checkPermissions()
BackgroundLocation.checkPermissions().then((status) {
// Check status here
});
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);
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"/>
Complete working application Example
- Add support for manually asking for permission.
- Add support for checking the permission status.
- Add support for chosing the rate at the which the location is fetched based on time and distance.