public abstract class LocationProvider extends Object
LocationProvider
represents a location-providing module, generating Location
s.
Applications obtain LocationProvider
instances (classes
implementing the actual functionality by extending this abstract class) by
calling the factory method. It is the responsibility of the implementation to
return the correct LocationProvider
-derived object.
Modifier and Type | Field and Description |
---|---|
static int |
AVAILABLE
Availability status code: the location provider is available.
|
static int |
OUT_OF_SERVICE
Availability status code: the location provider is out of service.
|
static int |
TEMPORARILY_UNAVAILABLE
Availability status code: the location provider is temporarily
unavailable.
|
Modifier | Constructor and Description |
---|---|
protected |
LocationProvider()
Empty constructor to help implementations and extensions.
|
Modifier and Type | Method and Description |
---|---|
static void |
addProximityListener(ProximityListener listener,
Coordinates coordinates,
float proximityRadius) |
static LocationProvider |
getInstance(Criteria criteria)
This factory method is used to get an actual
LocationProvider implementation based on the defined
criteria. |
static Location |
getLastKnownLocation()
Returns the last known location that the implementation has.
|
abstract Location |
getLocation(int timeout)
Retrieves a
Location with the constraints given by the
Criteria associated with this class. |
abstract int |
getState()
Returns the current state of this
LocationProvider . |
static void |
removeProximityListener(ProximityListener listener) |
abstract void |
reset()
Resets the
LocationProvider . |
abstract void |
setLocationListener(LocationListener listener,
int interval,
int timeout,
int maxAge)
Adds a
LocationListener for updates at the defined interval. |
public static final int AVAILABLE
public static final int TEMPORARILY_UNAVAILABLE
public static final int OUT_OF_SERVICE
protected LocationProvider()
public abstract int getState()
LocationProvider
. The
return value shall be one of the availability status code constants
defined in this class.LocationProvider
public static LocationProvider getInstance(Criteria criteria) throws LocationException
LocationProvider
implementation based on the defined
criteria. The implementation chooses the LocationProvider
so
that it best fits the defined criteria, taking into account also possible
implementation dependent preferences of the end user. If no concrete
LocationProvider
could be created that typically can match
the defined criteria but there are other location providers not meeting
the criteria that could be returned for a more relaxed criteria,
null
is returned to indicate this. The
LocationException
is thrown, if all supported location
providers are out of service.
A LocationProvider
instance is returned if there is a
location provider meeting the criteria in either the available or
temporarily unavailable state. Implementations should try to select
providers in the available state before providers in temporarily
unavailable state, but this can't be always guaranteed because the
implementation may not always know the state correctly at this point in
time. If a LocationProvider
meeting the criteria can be
supported but is currently out of service, it shall not be returned.
When this method is called with a Criteria
that has all
fields set to the default values (i.e. the least restrictive criteria
possible), the implementation shall return a
LocationException
if there is any provider that isn't in the
out of service state. Passing null
as the parameter is equal
to passing a Criteria
that has all fields set to the default
values, i.e. the least restrictive set of criteria.
This method only makes the selection of the provider based on the criteria and is intended to return it quickly to the application. Any possible initialization of the provider is done at an implementation dependent time and MUST NOT block the call to this method.
This method may, depending on the implementation, return the same
LocationProvider
instance as has been returned previously
from this method to the calling application, if the same instance can be
used to fulfill both defined criteria. Note that there can be only one
LocationListener
associated with a
LocationProvider
instance.
criteria
- the criteria for provider selection or null
to
indicate the least restrictive criteria with default valuesLocationProvider
meeting the defined criteria or
null
if a LocationProvider
that meets
the defined criteria can't be returned but there are other
supported available or temporarily unavailable providers that do
not meet the criteria.LocationException
- if all LocationProvider
s are currently out of
servicepublic abstract Location getLocation(int timeout) throws LocationException, InterruptedException
Location
with the constraints given by the
Criteria
associated with this class. If no result could be
retrieved, a LocationException
is thrown. If the location
can't be determined within the timeout period specified in the parameter,
the method shall throw a LocationException
.
If the provider is temporarily unavailable, the implementation shall wait
and try to obtain the location until the timeout expires. If the provider
is out of service, then the LocationException
is thrown
immediately.
Note that the individual Location returned might not fulfil exactly the
criteria used for selecting this LocationProvider
. The
Criteria
is used to select a location provider that
typically is able to meet the defined criteria, but not necessarily for
every individual location measurement.
timeout
- a timeout value in seconds. -1 is used to indicate that the
implementation shall use its default timeout value for this
provider.Location
objectLocationException
- if the location couldn't be retrieved or if the timeout
period expiredInterruptedException
- if the operation is interrupted by calling
reset()
from another threadIllegalArgumentException
- if the timeout = 0 or timeout < -1public abstract void setLocationListener(LocationListener listener, int interval, int timeout, int maxAge)
LocationListener
for updates at the defined interval.
The listener will be called with updated location at the defined
interval. The listener also gets updates when the availablilty state of
the LocationProvider
changes.
Passing in -1 as the interval selects the default interval which is dependent on the used location method. Passing in 0 as the interval registers the listener to only receive provider status updates and not location updates at all.
Only one listener can be registered with each
LocationProvider
instance. Setting the listener replaces any
possibly previously set listener. Setting the listener to
null
cancels the registration of any previously set
listener.
The implementation shall initiate obtaining the first location result
immediately when the listener is registered and provide the location to
the listener as soon as it is available. Subsequent location updates will
happen at the defined interval after the first one. If the specified
update interval is smaller than the time it takes to obtain the first
result, the listener shall receive location updates with invalid
Location
s at the defined interval until the first location
result is available. Note that prior to getting the first valid location
result, the timeout parameter has no effect. When the first valid
location result is obtained, the implementation may return it to the
application immediately, i.e. before the next interval is due. This
implies that in the beginning when starting to obtain location results,
the listener may first get updates with invalid location results at the
defined interval and when the first valid location result is obtained, it
may be returned to the listener as soon as it is available before the
next interval is due. After the first valid location result is delivered
to the application the timeout parameter is used and the next update is
delivered between the time defined by the interval and time
interval+timeout after the previous update.
The timeout parameter determines a timeout that is used if it's not
possible to obtain a new location result when the update is scheduled to
be provided. This timeout value indicates how many seconds the update is
allowed to be provided late compared to the defined interval. If it's not
possible to get a new location result (interval + timeout) seconds after
the previous update, the update will be made and an invalid
Location
instance is returned. This is also done if the
reason for the inability to obtain a new location result is due to the
provider being temporarily unavailable or out of service.
For example, if the interval is 60 seconds and the timeout is 10 seconds,
the update must be delivered at most 70 seconds after the previous update
and if no new location result is available by that time the update will
be made with an invalid Location
instance.
The maxAge parameter defines how old the location result is allowed to be provided when the update is made. This allows the implementation to reuse location results if it has a recent location result when the update is due to be delivered. This parameter can only be used to indicate a larger value than the normal time of obtaining a location result by a location method. The normal time of obtaining the location result means the time it takes normally to obtain the result when a request is made. If the application specifies a time value that is less than what can be realized with the used location method, the implementation shall provide as recent location results as are possible with the used location method. For example, if the interval is 60 seconds, the maxAge is 20 seconds and normal time to obtain the result is 10 seconds, the implementation would normally start obtaining the result 50 seconds after the previous update. If there is a location result otherwise available that is more recent than 40 seconds after the previous update, then the maxAge setting to 20 seconds allows to return this result and not start obtaining a new one.
The requirements for the intervals hold while the application is executing. If the application environment or the device is suspended so that the application will not execute at all and then the environment is later resumed, the periodic updates MUST continue at the defined interval but there may be a shift after the suspension period compared to the original interval schedule.
listener
- the listener to be registered. If set to null
the
registration of any previously set listener is cancelled.interval
- the interval in seconds. -1 is used for the default interval
of this provider. 0 is used to indicate that the application
wants to receive only provider status updates and not location
updates at all.timeout
- timeout value in seconds, must be greater than 0. if the value
is -1, the default timeout for this provider is used. Also, if
the interval is -1 to indicate the default, the value of this
parameter has no effect and the default timeout for this
provider is used. If timeout == -1 and interval > 0 and the
default timeout of the provider is greater than the specified
interval, then the timeout parameter is handled as if the
application had passed the same value as timeout as the
interval (i.e. timeout is considered to be equal to the
interval). If the interval is 0, this parameter has no effect.maxAge
- maximum age of the returned location in seconds, must be
greater than 0 or equal to -1 to indicate that the default
maximum age for this provider is used. Also, if the interval
is -1 to indicate the default, the value of this parameter has
no effect and the default maximum age for this provider is
used.public abstract void reset()
LocationProvider
.
All pending synchronous location requests will be aborted and any blocked
getLocation
method calls will terminate with
InterruptedException
.
Applications can use this method e.g. when exiting to have its threads freed from blocking synchronous operations.
public static Location getLastKnownLocation()
Applications can use this method to obtain the last known location and check the timestamp and other fields to determine if this is recent enough and good enough for the application to use without needing to make a new request for the current location.
null
is returned if the
implementation doesn't have any previous location information.public static void addProximityListener(ProximityListener listener, Coordinates coordinates, float proximityRadius) throws LocationException
LocationException
public static void removeProximityListener(ProximityListener listener)