This post was originally published on blog.mandarbadve.com
Location API
You can use Windows Phone’s location API if your windows phone application needs location of user. In this post we will see how to use location API.
Let’s code
Getting started by creating new windows phone application.
Double click on ‘WMAppManifest.xml’ file.(You can read here for more details.) You will find this file inside projects Properties.
Go to Capabilities tab and then select ‘ID_CAP_LOCATION’ capability. This will tell to Windows Phone Store that this application need access to users location. While installing application user will see prompt message about the need of location service. This is the first step of get permission to access location from the user.
We need some user interface to show location status. Copy the following code block inside the default grid created by visual studio template.
XAML Code
<StackPanel>
<Button x:Name="btnGetLocation" Click="btnGetLocation_Click">Get Location</Button>
<TextBlock x:Name="txtLatitude"></TextBlock>
<TextBlock x:Name="txtLongitude"></TextBlock>
<TextBlock x:Name="txtStatus"></TextBlock>
</StackPanel>
Finally your XAML code and designer will looks like this.
Code behind
Go to MainPage.xaml.cs and add following method
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (IsolatedStorageSettings.ApplicationSettings.Contains("LocationPermission"))
{
//// User already allowed app to access location
return;
}
//// User not allowed app to access location
//// Ask user to allow
MessageBoxResult result =
MessageBox.Show("Application needs your location. Please allow.", "Location", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
//// If user allows to access location
IsolatedStorageSettings.ApplicationSettings["LocationPermission"] = true;
}
else
{
//// If user not allows to access location
IsolatedStorageSettings.ApplicationSettings["LocationPermission"] = false;
}
IsolatedStorageSettings.ApplicationSettings.Save();
}
User will navigate to the MainPage.xaml page when he open application. At this time OnNaviatedTo method get called. This method first check user already set permission to access location.(No check here if he accepted or rejected location access request. We will check it later).
If user has not given permission to access location, we will show Ok Cancel message box of asking the permission to access location. If he responds with Ok, we will store the value of ‘LocationPermission’ key as true else false if user select Cancel option.
Get Location
Below is the button click event handler. Copy code and paste it below to above method.
private async void btnGetLocation_Click(object sender, RoutedEventArgs e)
{
if (!(bool)IsolatedStorageSettings.ApplicationSettings["LocationPermission"])
{
return;
}
Geolocator geolocator = new Geolocator();
geolocator.DesiredAccuracyInMeters = 50;
try
{
Geoposition geoposition = await geolocator.GetGeopositionAsync(
maximumAge: TimeSpan.FromMinutes(10),
timeout: TimeSpan.FromSeconds(10)
);
txtLatitude.Text = "Latitude: " + geoposition.Coordinate.Latitude.ToString();
txtLongitude.Text = "Longitude: " + geoposition.Coordinate.Longitude.ToString();
}
catch (Exception)
{
txtStatus.Text = "Your phone may not have geolocation API support.";
}
}
This method first check weather user allowed to access location or not by accessing the value of key ‘LocationPermission’ from Application Settings. If user not allowed then we will simply return.(You can show message to user here. E.g. You have rejected permission to access location.)
If user allows, we will create object of Geolocator. Set property ‘DesiredAccuracyInMeters’ to 50 meters. This option defines the accuracy of the location. You can get object of Geopostion by using the GetGeopositionAsync method of Geolocator object. Geoposition object contain Coordinate property which have Latitude and Longitude values. Set this values to the label as text.
Here is the final screen where you will see the Latitude and Longitude values on screen.
Conclusion
In this post we have seen the following things
- How to add location API capability in the manifest file.
- Ask user to allow to access location.
- Save user response in application settings.
In the next post we will see how can we use this coordinates to show location on maps.
Top comments (0)