Obtaining the latest cached location in a Background Agent

Today, in a Windows Phone 7.5 “Mango” app, I needed to retrieve the phone’s most recent location and send it to a server from a background agent.

On this MSDN page, Microsoft suggests doing this by using the GeoCoordinateWatcher API:

This API, used for obtaining the geographic coordinates of the device, is supported for use in background agents, but it uses a cached location value instead of real-time data. The cached location value is updated by the device every 15 minutes.

Excellent. So how do we actually go about retrieving the latest cached location? I couldn’t find a code example of this anywhere. It would probably make sense for the API to have a static, no-hassle method that returns the cached location, but it doesn’t provide that.

The following code will return the latest available location (up to 15 minutes old):

private GeoPosition GetCachedLocation()
{
    GeoCoordinateWatcher geoWatcher;
    //Start a new watcher with default level of accuracy
    geoWatcher = new GeoCoordinateWatcher();
    geoWatcher.Start();
    //Get latest cached position
    GeoPosition position = geoWatcher.Position;
    geoWatcher.Stop();
    return position;
}

Note that this method will execute even if you leave out geoWatcher.Start(); and geoWatcher.Stop();, which is what I tried at first, but then your location will contain empty values.

This satisfies my requirement. If you need some control over the provided accuracy, you could try creating your GeoCoordinateWatcher with a self-defined accuracy requirement using the GeoCoordinateWatcher(GeoPositionAccuracy) constructor, but I haven’t tested this. Since you can’t request a fresh location, perhaps it would simply return the latest available cached location that satisfies the given accuracy requirement?

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s