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.3.02: Install packages from the command line:
$ flutter packages getAlternatively, 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();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;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 getting the last location once without listening to location updates.
- Add support for chosing the rate at the which the location is fetched based on time and distance.