Most visited

Recently visited

Added in API level 1

LocationManager

public class LocationManager
extends Object

java.lang.Object
   ↳ android.location.LocationManager


This class provides access to the system location services. These services allow applications to obtain periodic updates of the device's geographical location, or to fire an application-specified Intent when the device enters the proximity of a given geographical location.

You do not instantiate this class directly; instead, retrieve it through Context.getSystemService(Context.LOCATION_SERVICE).

Unless noted, all Location API methods require the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permissions. If your application only has the coarse permission then it will not have access to the GPS or passive location providers. Other providers will still return location results, but the update rate will be throttled and the exact location will be obfuscated to a coarse level of accuracy.

Summary

Constants

String GPS_PROVIDER

Name of the GPS location provider.

String KEY_LOCATION_CHANGED

Key used for a Bundle extra holding a Location value when a location change is broadcast using a PendingIntent.

String KEY_PROVIDER_ENABLED

Key used for a Bundle extra holding an Boolean status value when a provider enabled/disabled event is broadcast using a PendingIntent.

String KEY_PROXIMITY_ENTERING

Key used for the Bundle extra holding a boolean indicating whether a proximity alert is entering (true) or exiting (false)..

String KEY_STATUS_CHANGED

Key used for a Bundle extra holding an Integer status value when a status change is broadcast using a PendingIntent.

String MODE_CHANGED_ACTION

Broadcast intent action when LOCATION_MODE changes.

String NETWORK_PROVIDER

Name of the network location provider.

String PASSIVE_PROVIDER

A special location provider for receiving locations without actually initiating a location fix.

String PROVIDERS_CHANGED_ACTION

Broadcast intent action when the configured location providers change.

Public methods

boolean addGpsStatusListener(GpsStatus.Listener listener)

This method was deprecated in API level 24. use registerGnssStatusCallback(GnssStatus.Callback) instead.

boolean addNmeaListener(OnNmeaMessageListener listener, Handler handler)

Adds an NMEA listener.

boolean addNmeaListener(OnNmeaMessageListener listener)

Adds an NMEA listener.

boolean addNmeaListener(GpsStatus.NmeaListener listener)

This method was deprecated in API level 24. use addNmeaListener(OnNmeaMessageListener) instead.

void addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent)

Set a proximity alert for the location given by the position (latitude, longitude) and the given radius.

void addTestProvider(String name, boolean requiresNetwork, boolean requiresSatellite, boolean requiresCell, boolean hasMonetaryCost, boolean supportsAltitude, boolean supportsSpeed, boolean supportsBearing, int powerRequirement, int accuracy)

Creates a mock location provider and adds it to the set of active providers.

void clearTestProviderEnabled(String provider)

Removes any mock enabled value associated with the given provider.

void clearTestProviderLocation(String provider)

Removes any mock location associated with the given provider.

void clearTestProviderStatus(String provider)

Removes any mock status values associated with the given provider.

List<String> getAllProviders()

Returns a list of the names of all known location providers.

String getBestProvider(Criteria criteria, boolean enabledOnly)

Returns the name of the provider that best meets the given criteria.

GpsStatus getGpsStatus(GpsStatus status)

Retrieves information about the current status of the GPS engine.

Location getLastKnownLocation(String provider)

Returns a Location indicating the data from the last known location fix obtained from the given provider.

LocationProvider getProvider(String name)

Returns the information associated with the location provider of the given name, or null if no provider exists by that name.

List<String> getProviders(Criteria criteria, boolean enabledOnly)

Returns a list of the names of LocationProviders that satisfy the given criteria, or null if none do.

List<String> getProviders(boolean enabledOnly)

Returns a list of the names of location providers.

boolean isProviderEnabled(String provider)

Returns the current enabled/disabled status of the given provider.

boolean registerGnssMeasurementsCallback(GnssMeasurementsEvent.Callback callback, Handler handler)

Registers a GPS Measurement callback.

boolean registerGnssMeasurementsCallback(GnssMeasurementsEvent.Callback callback)

Registers a GPS Measurement callback.

boolean registerGnssNavigationMessageCallback(GnssNavigationMessage.Callback callback, Handler handler)

Registers a GNSS Navigation Message callback.

boolean registerGnssNavigationMessageCallback(GnssNavigationMessage.Callback callback)

Registers a GNSS Navigation Message callback.

boolean registerGnssStatusCallback(GnssStatus.Callback callback)

Registers a GNSS status listener.

boolean registerGnssStatusCallback(GnssStatus.Callback callback, Handler handler)

Registers a GNSS status listener.

void removeGpsStatusListener(GpsStatus.Listener listener)

This method was deprecated in API level 24. use unregisterGnssStatusCallback(GnssStatus.Callback) instead.

void removeNmeaListener(OnNmeaMessageListener listener)

Removes an NMEA listener.

void removeNmeaListener(GpsStatus.NmeaListener listener)

This method was deprecated in API level 24. use removeNmeaListener(OnNmeaMessageListener) instead.

void removeProximityAlert(PendingIntent intent)

Removes the proximity alert with the given PendingIntent.

void removeTestProvider(String provider)

Removes the mock location provider with the given name.

void removeUpdates(LocationListener listener)

Removes all location updates for the specified LocationListener.

void removeUpdates(PendingIntent intent)

Removes all location updates for the specified pending intent.

void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

Register for location updates using the named provider, and a pending intent.

void requestLocationUpdates(long minTime, float minDistance, Criteria criteria, LocationListener listener, Looper looper)

Register for location updates using a Criteria, and a callback on the specified looper thread.

void requestLocationUpdates(long minTime, float minDistance, Criteria criteria, PendingIntent intent)

Register for location updates using a Criteria and pending intent.

void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener, Looper looper)

Register for location updates using the named provider, and a callback on the specified looper thread.

void requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent)

Register for location updates using the named provider, and a pending intent.

void requestSingleUpdate(String provider, PendingIntent intent)

Register for a single location update using a named provider and pending intent.

void requestSingleUpdate(String provider, LocationListener listener, Looper looper)

Register for a single location update using the named provider and a callback.

void requestSingleUpdate(Criteria criteria, LocationListener listener, Looper looper)

Register for a single location update using a Criteria and a callback.

void requestSingleUpdate(Criteria criteria, PendingIntent intent)

Register for a single location update using a Criteria and pending intent.

boolean sendExtraCommand(String provider, String command, Bundle extras)

Sends additional commands to a location provider.

void setTestProviderEnabled(String provider, boolean enabled)

Sets a mock enabled value for the given provider.

void setTestProviderLocation(String provider, Location loc)

Sets a mock location for the given provider.

void setTestProviderStatus(String provider, int status, Bundle extras, long updateTime)

Sets mock status values for the given provider.

void unregisterGnssMeasurementsCallback(GnssMeasurementsEvent.Callback callback)

Unregisters a GPS Measurement callback.

void unregisterGnssNavigationMessageCallback(GnssNavigationMessage.Callback callback)

Unregisters a GNSS Navigation Message callback.

void unregisterGnssStatusCallback(GnssStatus.Callback callback)

Removes a GNSS status listener.

Inherited methods

From class java.lang.Object

Constants

GPS_PROVIDER

Added in API level 1
String GPS_PROVIDER

Name of the GPS location provider.

This provider determines location using satellites. Depending on conditions, this provider may take a while to return a location fix. Requires the permission ACCESS_FINE_LOCATION.

The extras Bundle for the GPS location provider can contain the following key/value pairs:

  • satellites - the number of satellites used to derive the fix

Constant Value: "gps"

KEY_LOCATION_CHANGED

Added in API level 3
String KEY_LOCATION_CHANGED

Key used for a Bundle extra holding a Location value when a location change is broadcast using a PendingIntent.

Constant Value: "location"

KEY_PROVIDER_ENABLED

Added in API level 3
String KEY_PROVIDER_ENABLED

Key used for a Bundle extra holding an Boolean status value when a provider enabled/disabled event is broadcast using a PendingIntent.

Constant Value: "providerEnabled"

KEY_PROXIMITY_ENTERING

Added in API level 1
String KEY_PROXIMITY_ENTERING

Key used for the Bundle extra holding a boolean indicating whether a proximity alert is entering (true) or exiting (false)..

Constant Value: "entering"

KEY_STATUS_CHANGED

Added in API level 3
String KEY_STATUS_CHANGED

Key used for a Bundle extra holding an Integer status value when a status change is broadcast using a PendingIntent.

Constant Value: "status"

MODE_CHANGED_ACTION

Added in API level 19
String MODE_CHANGED_ACTION

Broadcast intent action when LOCATION_MODE changes. For use with the LOCATION_MODE API. If you're interacting with isProviderEnabled(String), use PROVIDERS_CHANGED_ACTION instead. In the future, there may be mode changes that do not result in PROVIDERS_CHANGED_ACTION broadcasts.

Constant Value: "android.location.MODE_CHANGED"

NETWORK_PROVIDER

Added in API level 1
String NETWORK_PROVIDER

Name of the network location provider.

This provider determines location based on availability of cell tower and WiFi access points. Results are retrieved by means of a network lookup.

Constant Value: "network"

PASSIVE_PROVIDER

Added in API level 8
String PASSIVE_PROVIDER

A special location provider for receiving locations without actually initiating a location fix.

This provider can be used to passively receive location updates when other applications or services request them without actually requesting the locations yourself. This provider will return locations generated by other providers. You can query the getProvider() method to determine the origin of the location update. Requires the permission ACCESS_FINE_LOCATION, although if the GPS is not enabled this provider might only return coarse fixes.

Constant Value: "passive"

PROVIDERS_CHANGED_ACTION

Added in API level 9
String PROVIDERS_CHANGED_ACTION

Broadcast intent action when the configured location providers change. For use with isProviderEnabled(String). If you're interacting with the LOCATION_MODE API, use MODE_CHANGED_ACTION instead.

Constant Value: "android.location.PROVIDERS_CHANGED"

Public methods

addGpsStatusListener

Added in API level 3
boolean addGpsStatusListener (GpsStatus.Listener listener)

This method was deprecated in API level 24.
use registerGnssStatusCallback(GnssStatus.Callback) instead.

Adds a GPS status listener.

Parameters
listener GpsStatus.Listener: GPS status listener object to register
Returns
boolean true if the listener was successfully added
Throws
SecurityException if the ACCESS_FINE_LOCATION permission is not present

addNmeaListener

Added in API level 24
boolean addNmeaListener (OnNmeaMessageListener listener, 
                Handler handler)

Adds an NMEA listener.

Parameters
listener OnNmeaMessageListener: a OnNmeaMessageListener object to register
handler Handler: the handler that the listener runs on.
Returns
boolean true if the listener was successfully added
Throws
SecurityException if the ACCESS_FINE_LOCATION permission is not present

addNmeaListener

Added in API level 24
boolean addNmeaListener (OnNmeaMessageListener listener)

Adds an NMEA listener.

Parameters
listener OnNmeaMessageListener: a OnNmeaMessageListener object to register
Returns
boolean true if the listener was successfully added
Throws
SecurityException if the ACCESS_FINE_LOCATION permission is not present

addNmeaListener

Added in API level 5
boolean addNmeaListener (GpsStatus.NmeaListener listener)

This method was deprecated in API level 24.
use addNmeaListener(OnNmeaMessageListener) instead.

Adds an NMEA listener.

Parameters
listener GpsStatus.NmeaListener: a GpsStatus.NmeaListener object to register
Returns
boolean true if the listener was successfully added
Throws
SecurityException if the ACCESS_FINE_LOCATION permission is not present

addProximityAlert

Added in API level 1
void addProximityAlert (double latitude, 
                double longitude, 
                float radius, 
                long expiration, 
                PendingIntent intent)

Set a proximity alert for the location given by the position (latitude, longitude) and the given radius.

When the device detects that it has entered or exited the area surrounding the location, the given PendingIntent will be used to create an Intent to be fired.

The fired Intent will have a boolean extra added with key KEY_PROXIMITY_ENTERING. If the value is true, the device is entering the proximity region; if false, it is exiting.

Due to the approximate nature of position estimation, if the device passes through the given area briefly, it is possible that no Intent will be fired. Similarly, an Intent could be fired if the device passes very close to the given area but does not actually enter it.

After the number of milliseconds given by the expiration parameter, the location manager will delete this proximity alert and no longer monitor it. A value of -1 indicates that there should be no expiration time.

Internally, this method uses both NETWORK_PROVIDER and GPS_PROVIDER.

Before API version 17, this method could be used with ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION. From API version 17 and onwards, this method requires ACCESS_FINE_LOCATION permission.

Parameters
latitude double: the latitude of the central point of the alert region
longitude double: the longitude of the central point of the alert region
radius float: the radius of the central point of the alert region, in meters
expiration long: time for this proximity alert, in milliseconds, or -1 to indicate no expiration
intent PendingIntent: a PendingIntent that will be used to generate an Intent to fire when entry to or exit from the alert region is detected
Throws
SecurityException if ACCESS_FINE_LOCATION permission is not present

addTestProvider

Added in API level 3
void addTestProvider (String name, 
                boolean requiresNetwork, 
                boolean requiresSatellite, 
                boolean requiresCell, 
                boolean hasMonetaryCost, 
                boolean supportsAltitude, 
                boolean supportsSpeed, 
                boolean supportsBearing, 
                int powerRequirement, 
                int accuracy)

Creates a mock location provider and adds it to the set of active providers.

Parameters
name String: the provider name
requiresNetwork boolean
requiresSatellite boolean
requiresCell boolean
hasMonetaryCost boolean
supportsAltitude boolean
supportsSpeed boolean
supportsBearing boolean
powerRequirement int
accuracy int
Throws
SecurityException if mock location app op is not set to allowed for your app.
IllegalArgumentException if a provider with the given name already exists

clearTestProviderEnabled

Added in API level 3
void clearTestProviderEnabled (String provider)

Removes any mock enabled value associated with the given provider.

Parameters
provider String: the provider name
Throws
SecurityException if mock location app op is not set to allowed for your app.
IllegalArgumentException if no provider with the given name exists

clearTestProviderLocation

Added in API level 3
void clearTestProviderLocation (String provider)

Removes any mock location associated with the given provider.

Parameters
provider String: the provider name
Throws
SecurityException if mock location app op is not set to allowed for your app.
IllegalArgumentException if no provider with the given name exists

clearTestProviderStatus

Added in API level 3
void clearTestProviderStatus (String provider)

Removes any mock status values associated with the given provider.

Parameters
provider String: the provider name
Throws
SecurityException if mock location app op is not set to allowed for your app.
IllegalArgumentException if no provider with the given name exists

getAllProviders

Added in API level 1
List<String> getAllProviders ()

Returns a list of the names of all known location providers.

All providers are returned, including ones that are not permitted to be accessed by the calling activity or are currently disabled.

Returns
List<String> list of Strings containing names of the provider

getBestProvider

Added in API level 1
String getBestProvider (Criteria criteria, 
                boolean enabledOnly)

Returns the name of the provider that best meets the given criteria. Only providers that are permitted to be accessed by the calling activity will be returned. If several providers meet the criteria, the one with the best accuracy is returned. If no provider meets the criteria, the criteria are loosened in the following sequence:

  • power requirement
  • accuracy
  • bearing
  • speed
  • altitude

Note that the requirement on monetary cost is not removed in this process.

Parameters
criteria Criteria: the criteria that need to be matched
enabledOnly boolean: if true then only a provider that is currently enabled is returned
Returns
String name of the provider that best matches the requirements

getGpsStatus

Added in API level 3
GpsStatus getGpsStatus (GpsStatus status)

Retrieves information about the current status of the GPS engine. This should only be called from the onGpsStatusChanged(int) callback to ensure that the data is copied atomically. The caller may either pass in a GpsStatus object to set with the latest status information, or pass null to create a new GpsStatus object.

Parameters
status GpsStatus: object containing GPS status details, or null.
Returns
GpsStatus status object containing updated GPS status.

getLastKnownLocation

Added in API level 1
Location getLastKnownLocation (String provider)

Returns a Location indicating the data from the last known location fix obtained from the given provider.

This can be done without starting the provider. Note that this location could be out-of-date, for example if the device was turned off and moved to another location.

If the provider is currently disabled, null is returned.

Parameters
provider String: the name of the provider
Returns
Location the last known location for the provider, or null
Throws
SecurityException if no suitable permission is present
IllegalArgumentException if provider is null or doesn't exist

getProvider

Added in API level 1
LocationProvider getProvider (String name)

Returns the information associated with the location provider of the given name, or null if no provider exists by that name.

Parameters
name String: the provider name
Returns
LocationProvider a LocationProvider, or null
Throws
IllegalArgumentException if name is null or does not exist
SecurityException if the caller is not permitted to access the given provider.

getProviders

Added in API level 1
List<String> getProviders (Criteria criteria, 
                boolean enabledOnly)

Returns a list of the names of LocationProviders that satisfy the given criteria, or null if none do. Only providers that are permitted to be accessed by the calling activity will be returned.

Parameters
criteria Criteria: the criteria that the returned providers must match
enabledOnly boolean: if true then only the providers which are currently enabled are returned.
Returns
List<String> list of Strings containing names of the providers

getProviders

Added in API level 1
List<String> getProviders (boolean enabledOnly)

Returns a list of the names of location providers.

Parameters
enabledOnly boolean: if true then only the providers which are currently enabled are returned.
Returns
List<String> list of Strings containing names of the providers

isProviderEnabled

Added in API level 1
boolean isProviderEnabled (String provider)

Returns the current enabled/disabled status of the given provider.

If the user has enabled this provider in the Settings menu, true is returned otherwise false is returned

Callers should instead use LOCATION_MODE unless they depend on provider-specific APIs such as requestLocationUpdates(String, long, float, LocationListener).

Before API version LOLLIPOP, this method would throw SecurityException if the location permissions were not sufficient to use the specified provider.

Parameters
provider String: the name of the provider
Returns
boolean true if the provider exists and is enabled
Throws
IllegalArgumentException if provider is null

registerGnssMeasurementsCallback

Added in API level 24
boolean registerGnssMeasurementsCallback (GnssMeasurementsEvent.Callback callback, 
                Handler handler)

Registers a GPS Measurement callback.

Parameters
callback GnssMeasurementsEvent.Callback: a GnssMeasurementsEvent.Callback object to register.
handler Handler: the handler that the callback runs on.
Returns
boolean true if the callback was added successfully, false otherwise.

registerGnssMeasurementsCallback

Added in API level 24
boolean registerGnssMeasurementsCallback (GnssMeasurementsEvent.Callback callback)

Registers a GPS Measurement callback.

Parameters
callback GnssMeasurementsEvent.Callback: a GnssMeasurementsEvent.Callback object to register.
Returns
boolean true if the callback was added successfully, false otherwise.

registerGnssNavigationMessageCallback

Added in API level 24
boolean registerGnssNavigationMessageCallback (GnssNavigationMessage.Callback callback, 
                Handler handler)

Registers a GNSS Navigation Message callback.

Parameters
callback GnssNavigationMessage.Callback: a GnssNavigationMessage.Callback object to register.
handler Handler: the handler that the callback runs on.
Returns
boolean true if the callback was added successfully, false otherwise.

registerGnssNavigationMessageCallback

Added in API level 24
boolean registerGnssNavigationMessageCallback (GnssNavigationMessage.Callback callback)

Registers a GNSS Navigation Message callback.

Parameters
callback GnssNavigationMessage.Callback: a GnssNavigationMessage.Callback object to register.
Returns
boolean true if the callback was added successfully, false otherwise.

registerGnssStatusCallback

Added in API level 24
boolean registerGnssStatusCallback (GnssStatus.Callback callback)

Registers a GNSS status listener.

Parameters
callback GnssStatus.Callback: GNSS status listener object to register
Returns
boolean true if the listener was successfully added
Throws
SecurityException if the ACCESS_FINE_LOCATION permission is not present

registerGnssStatusCallback

Added in API level 24
boolean registerGnssStatusCallback (GnssStatus.Callback callback, 
                Handler handler)

Registers a GNSS status listener.

Parameters
callback GnssStatus.Callback: GNSS status listener object to register
handler Handler: the handler that the callback runs on.
Returns
boolean true if the listener was successfully added
Throws
SecurityException if the ACCESS_FINE_LOCATION permission is not present

removeGpsStatusListener

Added in API level 3
void removeGpsStatusListener (GpsStatus.Listener listener)

This method was deprecated in API level 24.
use unregisterGnssStatusCallback(GnssStatus.Callback) instead.

Removes a GPS status listener.

Parameters
listener GpsStatus.Listener: GPS status listener object to remove

removeNmeaListener

Added in API level 24
void removeNmeaListener (OnNmeaMessageListener listener)

Removes an NMEA listener.

Parameters
listener OnNmeaMessageListener: a OnNmeaMessageListener object to remove

removeNmeaListener

Added in API level 5
void removeNmeaListener (GpsStatus.NmeaListener listener)

This method was deprecated in API level 24.
use removeNmeaListener(OnNmeaMessageListener) instead.

Removes an NMEA listener.

Parameters
listener GpsStatus.NmeaListener: a GpsStatus.NmeaListener object to remove

removeProximityAlert

Added in API level 1
void removeProximityAlert (PendingIntent intent)

Removes the proximity alert with the given PendingIntent.

Before API version 17, this method could be used with ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION. From API version 17 and onwards, this method requires ACCESS_FINE_LOCATION permission.

Parameters
intent PendingIntent: the PendingIntent that no longer needs to be notified of proximity alerts
Throws
IllegalArgumentException if intent is null
SecurityException if ACCESS_FINE_LOCATION permission is not present

removeTestProvider

Added in API level 3
void removeTestProvider (String provider)

Removes the mock location provider with the given name.

Parameters
provider String: the provider name
Throws
SecurityException if mock location app op is not set to allowed for your app.
IllegalArgumentException if no provider with the given name exists

removeUpdates

Added in API level 1
void removeUpdates (LocationListener listener)

Removes all location updates for the specified LocationListener.

Following this call, updates will no longer occur for this listener.

Parameters
listener LocationListener: listener object that no longer needs location updates
Throws
IllegalArgumentException if listener is null

removeUpdates

Added in API level 3
void removeUpdates (PendingIntent intent)

Removes all location updates for the specified pending intent.

Following this call, updates will no longer for this pending intent.

Parameters
intent PendingIntent: pending intent object that no longer needs location updates
Throws
IllegalArgumentException if intent is null

requestLocationUpdates

Added in API level 1
void requestLocationUpdates (String provider, 
                long minTime, 
                float minDistance, 
                LocationListener listener)

Register for location updates using the named provider, and a pending intent.

See requestLocationUpdates(long, float, Criteria, PendingIntent) for more detail on how to use this method.

Parameters
provider String: the name of the provider with which to register
minTime long: minimum time interval between location updates, in milliseconds
minDistance float: minimum distance between location updates, in meters
listener LocationListener: a LocationListener whose onLocationChanged(Location) method will be called for each location update
Throws
IllegalArgumentException if provider is null or doesn't exist on this device
IllegalArgumentException if listener is null
RuntimeException if the calling thread has no Looper
SecurityException if no suitable permission is present

requestLocationUpdates

Added in API level 9
void requestLocationUpdates (long minTime, 
                float minDistance, 
                Criteria criteria, 
                LocationListener listener, 
                Looper looper)

Register for location updates using a Criteria, and a callback on the specified looper thread.

See requestLocationUpdates(long, float, Criteria, PendingIntent) for more detail on how to use this method.

Parameters
minTime long: minimum time interval between location updates, in milliseconds
minDistance float: minimum distance between location updates, in meters
criteria Criteria: contains parameters for the location manager to choose the appropriate provider and parameters to compute the location
listener LocationListener: a LocationListener whose onLocationChanged(Location) method will be called for each location update
looper Looper: a Looper object whose message queue will be used to implement the callback mechanism, or null to make callbacks on the calling thread
Throws
IllegalArgumentException if criteria is null
IllegalArgumentException if listener is null
SecurityException if no suitable permission is present

requestLocationUpdates

Added in API level 9
void requestLocationUpdates (long minTime, 
                float minDistance, 
                Criteria criteria, 
                PendingIntent intent)

Register for location updates using a Criteria and pending intent.

The requestLocationUpdates() and requestSingleUpdate() register the current activity to be updated periodically by the named provider, or by the provider matching the specified Criteria, with location and status updates.

It may take a while to receive the first location update. If an immediate location is required, applications may use the getLastKnownLocation(String) method.

Location updates are received either by LocationListener callbacks, or by broadcast intents to a supplied PendingIntent.

If the caller supplied a pending intent, then location updates are sent with a key of KEY_LOCATION_CHANGED and a Location value.

The location update interval can be controlled using the minTime parameter. The elapsed time between location updates will never be less than minTime, although it can be more depending on the Location Provider implementation and the update interval requested by other applications.

Choosing a sensible value for minTime is important to conserve battery life. Each location update requires power from GPS, WIFI, Cell and other radios. Select a minTime value as high as possible while still providing a reasonable user experience. If your application is not in the foreground and showing location to the user then your application should avoid using an active provider (such as NETWORK_PROVIDER or GPS_PROVIDER), but if you insist then select a minTime of 5 * 60 * 1000 (5 minutes) or greater. If your application is in the foreground and showing location to the user then it is appropriate to select a faster update interval.

The minDistance parameter can also be used to control the frequency of location updates. If it is greater than 0 then the location provider will only send your application an update when the location has changed by at least minDistance meters, AND at least minTime milliseconds have passed. However it is more difficult for location providers to save power using the minDistance parameter, so minTime should be the primary tool to conserving battery life.

If your application wants to passively observe location updates triggered by other applications, but not consume any additional power otherwise, then use the PASSIVE_PROVIDER This provider does not actively turn on or modify active location providers, so you do not need to be as careful about minTime and minDistance. However if your application performs heavy work on a location update (such as network activity) then you should select non-zero values for minTime and/or minDistance to rate-limit your update frequency in the case another application enables a location provider with extremely fast updates.

In case the provider is disabled by the user, updates will stop, and a provider availability update will be sent. As soon as the provider is enabled again, location updates will immediately resume and a provider availability update sent. Providers can also send status updates, at any time, with extra's specific to the provider. If a callback was supplied then status and availability updates are via onProviderDisabled(String), onProviderEnabled(String) or onStatusChanged(String, int, Bundle). Alternately, if a pending intent was supplied then status and availability updates are broadcast intents with extra keys of KEY_PROVIDER_ENABLED or KEY_STATUS_CHANGED.

If a LocationListener is used but with no Looper specified then the calling thread must already be a Looper thread such as the main thread of the calling Activity. If a Looper is specified with a LocationListener then callbacks are made on the supplied Looper thread.

Prior to Jellybean, the minTime parameter was only a hint, and some location provider implementations ignored it. From Jellybean and onwards it is mandatory for Android compatible devices to observe both the minTime and minDistance parameters.

Parameters
minTime long: minimum time interval between location updates, in milliseconds
minDistance float: minimum distance between location updates, in meters
criteria Criteria: contains parameters for the location manager to choose the appropriate provider and parameters to compute the location
intent PendingIntent: a PendingIntent to be sent for each location update
Throws
IllegalArgumentException if criteria is null
IllegalArgumentException if intent is null
SecurityException if no suitable permission is present

requestLocationUpdates

Added in API level 1
void requestLocationUpdates (String provider, 
                long minTime, 
                float minDistance, 
                LocationListener listener, 
                Looper looper)

Register for location updates using the named provider, and a callback on the specified looper thread.

See requestLocationUpdates(long, float, Criteria, PendingIntent) for more detail on how to use this method.

Parameters
provider String: the name of the provider with which to register
minTime long: minimum time interval between location updates, in milliseconds
minDistance float: minimum distance between location updates, in meters
listener LocationListener: a LocationListener whose onLocationChanged(Location) method will be called for each location update
looper Looper: a Looper object whose message queue will be used to implement the callback mechanism, or null to make callbacks on the calling thread
Throws
IllegalArgumentException if provider is null or doesn't exist
IllegalArgumentException if listener is null
SecurityException if no suitable permission is present

requestLocationUpdates

Added in API level 3
void requestLocationUpdates (String provider, 
                long minTime, 
                float minDistance, 
                PendingIntent intent)

Register for location updates using the named provider, and a pending intent.

See requestLocationUpdates(long, float, Criteria, PendingIntent) for more detail on how to use this method.

Parameters
provider String: the name of the provider with which to register
minTime long: minimum time interval between location updates, in milliseconds
minDistance float: minimum distance between location updates, in meters
intent PendingIntent: a PendingIntent to be sent for each location update
Throws
IllegalArgumentException if provider is null or doesn't exist on this device
IllegalArgumentException if intent is null
SecurityException if no suitable permission is present

requestSingleUpdate

Added in API level 9
void requestSingleUpdate (String provider, 
                PendingIntent intent)

Register for a single location update using a named provider and pending intent.

See requestLocationUpdates(long, float, Criteria, PendingIntent) for more detail on how to use this method.

Parameters
provider String: the name of the provider with which to register
intent PendingIntent: a PendingIntent to be sent for the location update
Throws
IllegalArgumentException if provider is null or doesn't exist
IllegalArgumentException if intent is null
SecurityException if no suitable permission is present

requestSingleUpdate

Added in API level 9
void requestSingleUpdate (String provider, 
                LocationListener listener, 
                Looper looper)

Register for a single location update using the named provider and a callback.

See requestLocationUpdates(long, float, Criteria, PendingIntent) for more detail on how to use this method.

Parameters
provider String: the name of the provider with which to register
listener LocationListener: a LocationListener whose onLocationChanged(Location) method will be called when the location update is available
looper Looper: a Looper object whose message queue will be used to implement the callback mechanism, or null to make callbacks on the calling thread
Throws
IllegalArgumentException if provider is null or doesn't exist
IllegalArgumentException if listener is null
SecurityException if no suitable permission is present

requestSingleUpdate

Added in API level 9
void requestSingleUpdate (Criteria criteria, 
                LocationListener listener, 
                Looper looper)

Register for a single location update using a Criteria and a callback.

See requestLocationUpdates(long, float, Criteria, PendingIntent) for more detail on how to use this method.

Parameters
criteria Criteria: contains parameters for the location manager to choose the appropriate provider and parameters to compute the location
listener LocationListener: a LocationListener whose onLocationChanged(Location) method will be called when the location update is available
looper Looper: a Looper object whose message queue will be used to implement the callback mechanism, or null to make callbacks on the calling thread
Throws
IllegalArgumentException if criteria is null
IllegalArgumentException if listener is null
SecurityException if no suitable permission is present

requestSingleUpdate

Added in API level 9
void requestSingleUpdate (Criteria criteria, 
                PendingIntent intent)

Register for a single location update using a Criteria and pending intent.

See requestLocationUpdates(long, float, Criteria, PendingIntent) for more detail on how to use this method.

Parameters
criteria Criteria: contains parameters for the location manager to choose the appropriate provider and parameters to compute the location
intent PendingIntent: a PendingIntent to be sent for the location update
Throws
IllegalArgumentException if provider is null or doesn't exist
IllegalArgumentException if intent is null
SecurityException if no suitable permission is present

sendExtraCommand

Added in API level 3
boolean sendExtraCommand (String provider, 
                String command, 
                Bundle extras)

Sends additional commands to a location provider. Can be used to support provider specific extensions to the Location Manager API

Parameters
provider String: name of the location provider.
command String: name of the command to send to the provider.
extras Bundle: optional arguments for the command (or null). The provider may optionally fill the extras Bundle with results from the command.
Returns
boolean true if the command succeeds.

setTestProviderEnabled

Added in API level 3
void setTestProviderEnabled (String provider, 
                boolean enabled)

Sets a mock enabled value for the given provider. This value will be used in place of any actual value from the provider.

Parameters
provider String: the provider name
enabled boolean: the mock enabled value
Throws
SecurityException if mock location app op is not set to allowed for your app.
IllegalArgumentException if no provider with the given name exists

setTestProviderLocation

Added in API level 3
void setTestProviderLocation (String provider, 
                Location loc)

Sets a mock location for the given provider.

This location will be used in place of any actual location from the provider. The location object must have a minimum number of fields set to be considered a valid LocationProvider Location, as per documentation on Location class.

Parameters
provider String: the provider name
loc Location: the mock location
Throws
SecurityException if mock location app op is not set to allowed for your app.
IllegalArgumentException if no provider with the given name exists
IllegalArgumentException if the location is incomplete

setTestProviderStatus

Added in API level 3
void setTestProviderStatus (String provider, 
                int status, 
                Bundle extras, 
                long updateTime)

Sets mock status values for the given provider. These values will be used in place of any actual values from the provider.

Parameters
provider String: the provider name
status int: the mock status
extras Bundle: a Bundle containing mock extras
updateTime long: the mock update time
Throws
SecurityException if mock location app op is not set to allowed for your app.
IllegalArgumentException if no provider with the given name exists

unregisterGnssMeasurementsCallback

Added in API level 24
void unregisterGnssMeasurementsCallback (GnssMeasurementsEvent.Callback callback)

Unregisters a GPS Measurement callback.

Parameters
callback GnssMeasurementsEvent.Callback: a GnssMeasurementsEvent.Callback object to remove.

unregisterGnssNavigationMessageCallback

Added in API level 24
void unregisterGnssNavigationMessageCallback (GnssNavigationMessage.Callback callback)

Unregisters a GNSS Navigation Message callback.

Parameters
callback GnssNavigationMessage.Callback: a GnssNavigationMessage.Callback object to remove.

unregisterGnssStatusCallback

Added in API level 24
void unregisterGnssStatusCallback (GnssStatus.Callback callback)

Removes a GNSS status listener.

Parameters
callback GnssStatus.Callback: GNSS status listener object to remove

Hooray!