|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.openlapi.LocationProvider
public abstract class LocationProvider
This is the starting point for applications using this API and represents a source of the location information. A LocationProvider represents a location-providing module, generating Locations.
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.
Applications that need to specify criteria for the location provider selection, must first create a Criteria object, and pass it to the factory method. The methods that access the location related information shall throw SecurityException if the application does not have the relevant permission to access the location information.
Field Summary | |
---|---|
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. |
Constructor Summary | |
---|---|
protected |
LocationProvider()
Empty constructor to help implementations and extensions. |
Method Summary | |
---|---|
static void |
addProximityListener(ProximityListener listener,
Coordinates coordinates,
float proximityRadius)
Adds a ProximityListener for updates when proximity to the specified coordinates is detected. |
protected static void |
alertProximityListeners(boolean status)
Convenience method that tells all the proximity listeners that we are periodically reporting the location or not. |
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)
Removes a ProximityListener from the list of recipients for updates. |
abstract void |
reset()
Resets the LocationProvider. |
protected static void |
setLastKnownLocation(Location location)
This is an implementation specific method to alert the LocationProvider of the latest location. |
abstract void |
setLocationListener(LocationListener listener,
int interval,
int timeout,
int maxAge)
Adds a LocationListener for updates at the defined interval. |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final int AVAILABLE
public static final int OUT_OF_SERVICE
public static final int TEMPORARILY_UNAVAILABLE
Constructor Detail |
---|
protected LocationProvider()
Method Detail |
---|
public static void addProximityListener(ProximityListener listener, Coordinates coordinates, float proximityRadius) throws LocationException, java.lang.IllegalArgumentException, java.lang.NullPointerException, java.lang.SecurityException
If the current location is known to be within the proximity radius of the specified coordinates, the listener shall be called immediately.
Detecting the proximity to the defined coordinates is done on a best effort basis by the implementation. Due to the limitations of the methods used to implement this, there are no guarantees that the proximity is always detected; especially in situations where the terminal briefly enters the proximity area and exits it shortly afterwards, it is possible that the implementation misses this. It is optional to provide this feature as it may not be reasonably implementable with all methods used to implement this API.
If the implementation is capable of supporting the proximity monitoring and has resources to add the new listener and coordinates to be monitored but the monitoring can't be currently done due to the current state of the method used to implement it, this method shall succeed and the monitoringStateChanged method of the listener shall be immediately called to notify that the monitoring is not active currently.
listener
- the listener to be registeredcoordinates
- the coordinates to be registeredproximityRadius
- the radius in meters that is considered to be the threshold for being in
the proximity of the specified coordinates
LocationException
- if the platform does not have resources to add a new listener and
coordinates to be monitored or does not support proximity monitoring at
all
java.lang.IllegalArgumentException
- if the proximity radius is 0 or negative* or Float.NaN
java.lang.NullPointerException
- if the listener or coordinates parameter is null
java.lang.SecurityException
- if the application does not have the permission to register a proximity
listenerpublic static LocationProvider getInstance(Criteria criteria) throws LocationException
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 LocationProvider 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 fulfil 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 values
LocationException
- if all LocationProviders are currently out of servicepublic static Location getLastKnownLocation() throws java.lang.SecurityException
java.lang.SecurityException
- if the calling application does not have a permission to query the
location informationpublic static void removeProximityListener(ProximityListener listener) throws java.lang.NullPointerException
NOTE: the specification conflicts with itself on how to handle null parameter. We throw the exception.
listener
- the listener to remove
java.lang.NullPointerException
- if the parameter is nullprotected static void alertProximityListeners(boolean status)
status
- protected static void setLastKnownLocation(Location location)
Will check if the given Location has a more recent timestamp before committing to the update.
location
- public abstract Location getLocation(int timeout) throws LocationException, java.lang.InterruptedException, java.lang.SecurityException, java.lang.IllegalArgumentException
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.
LocationException
- if the location couldn't be retrieved or if the timeout period expired
java.lang.InterruptedException
- if the operation is interrupted by calling reset() from another thread
java.lang.SecurityException
- if the calling application does not have a permission to query the
location information
java.lang.IllegalArgumentException
- if the timeout = 0 or timeout < -1public abstract int getState()
public abstract void reset()
Applications can use this method e.g. when exiting to have its threads freed from blocking synchronous operations.
public abstract void setLocationListener(LocationListener listener, int interval, int timeout, int maxAge)
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 Locations 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.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |