SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Oliver Scheer
Senior Technical Evangelist
Microsoft Deutschland
http://the-oliver.com
Location and Maps
Agenda
Location and
Maps on
Windows Phone 8
Introducing the new Location API
and the new Maps Controls
Windows Phone Runtime Location API
How to Get the Phone’s Current Location
How to Continuously Track the Phone’s Location
How to Run Location-Tracking Apps in the Background
Getting Started with the New Map Control
Specifying Map Center and Zoom
Animating Map Display Using Map Views
3/19/2014Microsoft confidential3
Windows Phone
Runtime Location
API
Location APIs on Windows Phone 8
• .NET Location API from Windows Phone OS 7.1 is still supported
• System.Device.Location.GeoCoordinateWatcher and related
classes
• New Windows Phone Runtime location API
• Accessible from managed and native code
• Improved ability for one-shot location acquisition
• Improved capabilities for location tracking
• Convergent with Windows 8 location API
ID_CAP_LOCATION Capability
• You must include the ID_CAP_LOCATION capability in your app manifest
• If you forget, calls to location APIs throw an UnauthorizedAccessException
3/19/20145
Location Sources
Location
Services
+ Accuracy
- Power
- Speed
- Indoors
- Accuracy
+ Power
+ Speed
- Wilderness
+/- Accuracy
+/- Power
+/- Speed
+/- Urban areas
GPS
Cell Towers
WiFi
• You can’t!
• You can set the DesiredAccuracy property of the Geolocator object:
• PositionAccuracy.High – if you want the most accurate data available, but at the cost of
increased battery usage, network bandwidth and possibly monetary charges from wireless
network operators. Often this causes the GPS to be activated
• PositionAccuracy.Default – to optimize for power
• You can also set the DesiredAccuracyInMeters property to indicate to the Geolocation
service the desired accuracy of any results
• However, the Geolocation service determines the best location data to provide to the
application
Controlling the Sources the Geolocation Service Uses
3/19/2014‹#›
How to Get the Phone’s Current Location
private async void OneShotLocation_Click(object sender, RoutedEventArgs e)
{
Geolocator geolocator = new Geolocator();
geolocator.DesiredAccuracyInMeters = 50;
try
{
Geoposition geoposition = await geolocator.GetGeopositionAsync(
maximumAge: TimeSpan.FromMinutes(5),
timeout: TimeSpan.FromSeconds(10)
);
LatitudeTextBlock.Text = geoposition.Coordinate.Latitude.ToString("0.00");
LongitudeTextBlock.Text = geoposition.Coordinate.Longitude.ToString("0.00");
}
catch (UnauthorizedAccessException)
{
// the app does not have the right capability or the location master switch is off
StatusTextBlock.Text = "location is disabled in phone settings.";
}
}
User Consent
• Application certification requirements on user consent still the same as in 7.1
• If you are using location data just within your app, you do not need to ask explicitly for
user consent (although they give consent when they install your app)
• You only have to get user consent if you plan to make location data available to any other
service or other person:
2.7.4 If your application publishes or makes available location data obtained from the Location Service API to any other
service or other person (including advertising networks), your application must implement a method to obtain opt-in
consent. …
3/19/20149
• Windows Phone Emulator comes with Location simulator
Location on Emulator
10
11
Demo 1
Get Phone Position
and Location Emulator
• If your app only needs the user’s location at the current
time, use GetGeopositionAsync as already described
• Continuously tracking the user’s location drains the
user’s battery more and should only be used for apps
that require it
Location Tracking
3/19/2014Microsoft confidential12
private void TrackLocation_Click(object sender, RoutedEventArgs e)
{
if (!tracking) {
geolocator = new Geolocator();
geolocator.DesiredAccuracy = PositionAccuracy.High;
geolocator.MovementThreshold = 100; // The units are meters.
geolocator.StatusChanged += geolocator_StatusChanged;
geolocator.PositionChanged += geolocator_PositionChanged;
tracking = true;
}
else {
geolocator.PositionChanged -= geolocator_PositionChanged;
geolocator.StatusChanged -= geolocator_StatusChanged;
geolocator = null;
tracking = false;
}
}
How to Track Location
3/19/2014
void geolocator_StatusChanged(Geolocator sender, StatusChangedEventArgs args)
{
string status = "";
switch (args.Status)
{
case PositionStatus.Disabled:
// the application does not have the right capability or the location master switch is off
status = "location is disabled in phone settings";
break;
case PositionStatus.Initializing:
// the geolocator started the tracking operation
status = "initializing";
break;
case PositionStatus.NoData:
// the location service was not able to acquire the location
status = "no data";
break;
Geolocator Status
3/19/2014Microsoft confidential14
void geolocator_StatusChanged(Geolocator sender, StatusChangedEventArgs args)
{
string status = "";
switch (args.Status)
{
case PositionStatus.Disabled:
// the application does not have the right capability or the location master switch is off
status = "location is disabled in phone settings";
break;
case PositionStatus.Initializing:
// the geolocator started the tracking operation
status = "initializing";
break;
case PositionStatus.NoData:
// the location service was not able to acquire the location
status = "no data";
break;
case PositionStatus.Ready:
Geolocator Status
void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
{
Dispatcher.BeginInvoke(() =>
{
LatitudeTextBlock.Text = args.Position.Coordinate.Latitude.ToString("0.00");
LongitudeTextBlock.Text = args.Position.Coordinate.Longitude.ToString("0.00");
});
}
Position Changed
3/19/2014Microsoft confidential16
17
Demo 2
Tracking Phone Position
• Normally, when your user navigates away from your app, it is made dormant and all
activity – including location tracking – is suspended
• In Windows Phone 8, a location-tracking app can continue to run in the background after
the user navigates away, as long as the app continues to actively track location
• This feature enables scenarios such as an app that provides turn-by-turn directions or a
run tracker
Enable Location Tracking in the Background
3/19/2014Microsoft confidential18
• Edit WMAppManifest.xml using the XML (Text) Editor
• Replace <DefaultTask> element as shown
Enable Background Execution
19
• In App.Xaml, register an event handler for the RunningInBackground event
• This event is raised when the user navigates away from your background execution-enabled app
while you are actively tracking location
• When this event is raised, your app should stop all tasks that are not related to location tracking,
including updates to the app’s UI
<Application.ApplicationLifetimeObjects>
<!--Required object that handles lifetime events for the application-->
<shell:PhoneApplicationService
Launching="Application_Launching" Closing="Application_Closing“
Activated="Application_Activated" Deactivated="Application_Deactivated“
RunningInBackground="Application_RunningInBackground"/>
</Application.ApplicationLifetimeObjects>
Register Event Handler for RunningInBackground Event
3/19/2014Microsoft confidential20
// Static variables global to application to support tracking
public static Geolocator Geolocator { get; set; }
public static bool RunningInBackground { get; set; }
// Code to execute when the application is activated (brought to foreground)
private void Application_Activated(object sender, ActivatedEventArgs e)
{
RunningInBackground = false;
}
// Code to execute when the application is deactivated and is tracking location
private void Application_RunningInBackground(object sender, RunningInBackgroundEventArgs e)
{
RunningInBackground = true;
// Suspend all unnecessary processing such as UI updates
}
Implement RunningInBackground Event Handler
3/19/2014Microsoft confidential21
void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
{
if (!App.RunningInBackground)
{
Dispatcher.BeginInvoke(() => {
LatitudeTextBlock.Text = args.Position.Coordinate.Latitude.ToString("0.00");
LongitudeTextBlock.Text = args.Position.Coordinate.Longitude.ToString("0.00"); });
}
else
{ // DEMO purposes only: Show toast if running in background
Microsoft.Phone.Shell.ShellToast toast = new Microsoft.Phone.Shell.ShellToast();
toast.Content = args.Position.Coordinate.Latitude.ToString("0.00");
toast.Title = "Location: ";
toast.NavigationUri = new Uri("/Page2.xaml", UriKind.Relative);
toast.Show();
}
}
Do Not Update UI When Running in the Background
Example
23
Demo 3
Background Location Tracking
• As we have seen, Background Location Tracking apps continue to run in the background
• But if it is not actively tracking location when deactivated, it is made dormant as normal
• If the user launches *another* location tracking app and deactivates that, then your app will be
made dormant
• If the user launches a new instance of the app, if there is a dormant instance, that is
reactivated instead
• Background Location Tracking apps get the Fast Application Resume behavior, which reactivates a
dormant application if the user launches a new copy
• The dormant instance of the app, including the history of visited app pages, is reactivated
• By default, the list of previously visited pages is cleared for these ‘Reset’ activations
• This may not be what you want…
App Lifecycle for Background Location Tracking Apps
Fast Application Resume
3/19/2014Microsoft confidential24
private void InitializePhoneApplication()
{
...
// Handle reset requests for clearing the backstack
RootFrame.Navigated += CheckForResetNavigation;
...
}
private void CheckForResetNavigation(object sender, NavigationEventArgs e)
{
// If the app has received a 'reset' navigation, then we need to check
// on the next navigation to see if the page stack should be reset
if (e.NavigationMode == NavigationMode.Reset)
RootFrame.Navigated += ClearBackStackAfterReset;
}
Clearing Previously Launched Pages on Fast App Resume
Add Logic to App.Xaml.cs to Check for Reset Navigation (Behavior Already Implemented in Project Templates)
3/19/2014Microsoft confidential25
private void InitializePhoneApplication()
{
...
// Handle reset requests for clearing the backstack
RootFrame.Navigated += CheckForResetNavigation;
...
}
private void CheckForResetNavigation(object sender, NavigationEventArgs e)
{
// If the app has received a 'reset' navigation, then we need to check
// on the next navigation to see if the page stack should be reset
if (e.NavigationMode == NavigationMode.Reset)
RootFrame.Navigated += ClearBackStackAfterReset;
}
private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)
Clearing Previously Launched Pages on Fast App Resume
Add Logic to App.Xaml.cs to Check for Reset Navigation (Behavior Already Implemented in Project Templates)
3/19/2014Microsoft confidential26
Maps
Maps APIs on Windows Phone 8
• Windows Phone 8 has new Map controls, accessible in the
following namespaces:
• Microsoft.Phone.Maps
• Microsoft.Phone.Maps.Controls
• Microsoft.Phone.Maps.Services
• The Bing Maps Control is still supported, but is deprecated
• You should only use the Bing Maps Control when you upgrade
an app from Windows Phone OS 7.1 to Windows Phone 8
• Usage of the new Maps control differs from the Bing Maps control
ID_CAP_MAP Capability
• You must include the ID_CAP_MAP capability in your app manifest
• If you forget, calls to location APIs throw an UnauthorizedAccessException
3/19/201429
• Add a Map to your UI
• In XAML:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<maps:Map x:Name="MyMap"/>
</Grid>
• In Code:
private void CreateMap()
{
Map MyMap = new Map();
ContentPanel.Children.Add(MyMap);
}
Map Control
• By default, map displays at zoom level 1 (world
view) and centered at Lat: 0, Long: 0
• Use the Center and ZoomLevel properties to
change this, in XAML or in code
//Set the Map center by using Center property
MyMap.Center = new GeoCoordinate(47.6097, -122.3331);
//Set the map zoom by using ZoomLevel property
MyMap.ZoomLevel = 10;
Center and Zoom Level
3/19/2014Microsoft confidential31
• It is common to move a map display from one location to another
• A new map view is defined any time the position of the map is changed as a result of panning,
zooming, rotating, or tilting
• You can use the SetView method to define a map view.
This takes the following parameters:
• Center: A GeoCoordiante object defining the center of the map view
• ZoomLevel: zoom level between 1 and 20
• Heading: specifies the directional heading that is pointing “up” on the mapin geometric degrees between 0 and
360
• Pitch: specifies the degree to which the map is tilted as a value between 0 and 180
• BoundingRectangle: a LocationRectangle object that contains the Map control
• AnimationKind: sets the kind of animation you want to see (None, Linear or Parabolic) when the view changes
MapViews
3/19/2014Microsoft confidential32
• Set the cartographic mode of the map with the CartographicMode property
Cartographic Mode
3/19/2014Microsoft confidential33
Road (default) Aerial Hybrid Terrain
• You can display the map in a light or dark color mode by setting the ColorMode property
Light and Dark Color Modes
3/19/2014Microsoft confidential34
Light (default) Dark
• You can display additional elements on your map,
such as landmarks and pedestrian features
• Set the LandmarksEnabled property to true
to display landmarks
• Set the PedestrianFeaturesEnabled to true
to display pedestrian features
• Landmarks are visible only when the ZoomLevel is
7 or higher, and the Pitch property is 25 or higher
Pedestrian Features and Landmarks
3/19/2014Microsoft confidential35
36
Demo 4
Maps Control
• Unlike the Bing Maps API, the Windows Phone
Maps API does not have a specific PushPin object
• However, you can create your own PushPins by
drawing UIElements onto a MapOverlay, then
add the MapOverlay to a MapLayer which you
add to the Map
Pushpins
3/19/2014Microsoft confidential37
private Grid CreatePushpin()
{
//Creating a Grid element.
Grid MyGrid = new Grid();
MyGrid.RowDefinitions.Add(new RowDefinition());
MyGrid.RowDefinitions.Add(new RowDefinition());
MyGrid.Background = new SolidColorBrush(Colors.Transparent);
//Creating a Rectangle
Rectangle MyRectangle = new Rectangle();
MyRectangle.Fill = new SolidColorBrush(Colors.Black);
MyRectangle.Height = 20;
MyRectangle.Width = 20;
MyRectangle.SetValue(Grid.RowProperty, 0);
MyRectangle.SetValue(Grid.ColumnProperty, 0);
//Adding the Rectangle to the Grid
MyGrid.Children.Add(MyRectangle);
Creating a Pushpin
3/19/2014Microsoft confidential38
private Grid CreatePushpin()
{
//Creating a Grid element.
Grid MyGrid = new Grid();
MyGrid.RowDefinitions.Add(new RowDefinition());
MyGrid.RowDefinitions.Add(new RowDefinition());
MyGrid.Background = new SolidColorBrush(Colors.Transparent);
//Creating a Rectangle
Rectangle MyRectangle = new Rectangle();
MyRectangle.Fill = new SolidColorBrush(Colors.Black);
MyRectangle.Height = 20;
MyRectangle.Width = 20;
MyRectangle.SetValue(Grid.RowProperty, 0);
MyRectangle.SetValue(Grid.ColumnProperty, 0);
//Adding the Rectangle to the Grid
MyGrid.Children.Add(MyRectangle);
Creating a Pushpin
3/19/2014Microsoft confidential39
private void AddMapOverlay()
{
Grid MyGrid = CreatePushpin();
//Creating a MapOverlay and adding the Grid to it.
MapOverlay MyOverlay = new MapOverlay();
MyOverlay.Content = MyGrid;
MyOverlay.GeoCoordinate = new GeoCoordinate(47.6097, -122.3331);
MyOverlay.PositionOrigin = new Point(0, 0.5);
//Creating a MapLayer and adding the MapOverlay to it
MapLayer MyLayer = new MapLayer();
MyLayer.Add(MyOverlay);
MyMap.Layers.Add(MyLayer);
}
Drawing a UIElement onto a MapLayer
3/19/2014Microsoft confidential40
41
Demo 5
Pushpins
New Maps Launchers in
Windows Phone 8.0
MapsTask
MapsTask makes launching the built-in Maps application easy
MapsTask mapsTask = new MapsTask();
//Omit the Center property to use the user's current location.
mapsTask.Center = new GeoCoordinate(47.6204, -122.3493);
mapsTask.SearchTerm = "coffee";
mapsTask.ZoomLevel = 17;
mapsTask.Show();
• Launching built-in Maps tasks with directions enabled is trivial too!
MapsDirectionsTask
44
// Get Directions
MapsDirectionsTask mapsDirectionsTask = new MapsDirectionsTask();
// You can specify a label and a geocoordinate for the end point.
// GeoCoordinate spaceNeedleLocation = new GeoCoordinate(47.6204,-122.3493);
// LabeledMapLocation spaceNdleLML = new LabeledMapLocation("Space Needle",
spaceNeedleLocation);
// If you set the geocoordinate parameter to null, the label parameter
// is used as a search term.
LabeledMapLocation spaceNdleLML = new LabeledMapLocation("Space Needle", null);
// If mapsDirectionsTask.Start is not set, the user's current location
// is used as start point.
mapsDirectionsTask.End = spaceNdleLML;
mapsDirectionsTask.Show();
• Use the map downloader task to enable users to download map
data for offline use
• The task launches the Maps settings application which allows the
user to select a region of map data to download
MapDownloaderTask
MapDownloaderTask mapDownloaderTask = new MapDownloaderTask();
mapDownloaderTask.Show();
• Use the map updater task to enable users to update map data they
have previously downloaded for offline use
• The task launches the Maps settings application which immediately
checks to see if there are updates available for any previously
downloaded map data
MapUpdaterTask
MapUpdaterTask mapUpdaterTask = new MapUpdaterTask();
mapUpdaterTask.Show();
47
Demo 6
MapsTask, MapsDirectionsTask,
MapDownloaderTask, MapUpdaterTask
Review
• Windows Phone Runtime location API is new in Windows Phone 8. It has the following
features:
• Accessible from managed and native code
• Greater support for one-shot location acquisition
• Support for Background Location Tracking
• Convergent with Windows 8
• Use the new Maps APIs in Windows Phone 8 to develop maps-based apps, and
incorporate location and search features
• Set Center and Zoom Level
• Animate to new location and zoom using map views
• Select Road, Aerial, Hybrid or Terrain cartographic display modes
• Draw UIElements onto a MapOverlay on top of the Map
The information herein is for informational
purposes only an represents the current view of
Microsoft Corporation as of the date of this
presentation. Because Microsoft must respond
to changing market conditions, it should not be
interpreted to be a commitment on the part of
Microsoft, and Microsoft cannot guarantee the
accuracy of any information provided after the
date of this presentation.
© 2012 Microsoft Corporation.
All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION
IN THIS PRESENTATION.

Weitere ähnliche Inhalte

Ähnlich wie Windows Phone 8 - 15 Location and Maps

Windows phone 7 series
Windows phone 7 seriesWindows phone 7 series
Windows phone 7 series
openbala
 
Windows Phone 8 Fundamental
Windows Phone 8 FundamentalWindows Phone 8 Fundamental
Windows Phone 8 Fundamental
Nguyên Phạm
 
097 smart devices-con_las_aplicaciones_de_gestión
097 smart devices-con_las_aplicaciones_de_gestión097 smart devices-con_las_aplicaciones_de_gestión
097 smart devices-con_las_aplicaciones_de_gestión
GeneXus
 

Ähnlich wie Windows Phone 8 - 15 Location and Maps (20)

12.Maps and Location
12.Maps and Location12.Maps and Location
12.Maps and Location
 
Developing Windows Phone Apps with Maps and Location Services
Developing Windows Phone Apps with Maps and Location ServicesDeveloping Windows Phone Apps with Maps and Location Services
Developing Windows Phone Apps with Maps and Location Services
 
Windows phone 7 series
Windows phone 7 seriesWindows phone 7 series
Windows phone 7 series
 
How to start a turn-by-turn navigation to a destination from your Windows Pho...
How to start a turn-by-turn navigation to a destination from your Windows Pho...How to start a turn-by-turn navigation to a destination from your Windows Pho...
How to start a turn-by-turn navigation to a destination from your Windows Pho...
 
LUMIA APP LABS: HERE MAPS AND LOCATION APIS FOR WINDOWS PHONE
LUMIA APP LABS: HERE MAPS AND LOCATION APIS FOR WINDOWS PHONELUMIA APP LABS: HERE MAPS AND LOCATION APIS FOR WINDOWS PHONE
LUMIA APP LABS: HERE MAPS AND LOCATION APIS FOR WINDOWS PHONE
 
Core Location in iOS
Core Location in iOSCore Location in iOS
Core Location in iOS
 
Windows Phone 8 Fundamental
Windows Phone 8 FundamentalWindows Phone 8 Fundamental
Windows Phone 8 Fundamental
 
20220816-GeolocationAPI-AdvancedWebDevelopment.pptx
20220816-GeolocationAPI-AdvancedWebDevelopment.pptx20220816-GeolocationAPI-AdvancedWebDevelopment.pptx
20220816-GeolocationAPI-AdvancedWebDevelopment.pptx
 
International Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentInternational Journal of Engineering Research and Development
International Journal of Engineering Research and Development
 
How to use geolocation in react native apps
How to use geolocation in react native appsHow to use geolocation in react native apps
How to use geolocation in react native apps
 
Html5 geolocation api
Html5 geolocation apiHtml5 geolocation api
Html5 geolocation api
 
20180823 警廣地圖APP開發與踩到的n個坑
20180823 警廣地圖APP開發與踩到的n個坑20180823 警廣地圖APP開發與踩到的n個坑
20180823 警廣地圖APP開發與踩到的n個坑
 
Will it run or will it not run? Background processes in Android 6 - Anna Lifs...
Will it run or will it not run? Background processes in Android 6 - Anna Lifs...Will it run or will it not run? Background processes in Android 6 - Anna Lifs...
Will it run or will it not run? Background processes in Android 6 - Anna Lifs...
 
097 smart devices-con_las_aplicaciones_de_gestión
097 smart devices-con_las_aplicaciones_de_gestión097 smart devices-con_las_aplicaciones_de_gestión
097 smart devices-con_las_aplicaciones_de_gestión
 
MBLTDev: Phillip Connaughton, RunKepper
MBLTDev: Phillip Connaughton, RunKepper MBLTDev: Phillip Connaughton, RunKepper
MBLTDev: Phillip Connaughton, RunKepper
 
MAD Unit 6.pptx
MAD Unit 6.pptxMAD Unit 6.pptx
MAD Unit 6.pptx
 
Develop a native application that uses GPS location.pptx
Develop a native application that uses GPS location.pptxDevelop a native application that uses GPS location.pptx
Develop a native application that uses GPS location.pptx
 
Architecting Single Activity Applications (With or Without Fragments)
Architecting Single Activity Applications (With or Without Fragments)Architecting Single Activity Applications (With or Without Fragments)
Architecting Single Activity Applications (With or Without Fragments)
 
Tracking android apps
Tracking android appsTracking android apps
Tracking android apps
 
Android Activities.pdf
Android Activities.pdfAndroid Activities.pdf
Android Activities.pdf
 

Mehr von Oliver Scheer

Windows Phone 8 - 16 Wallet and In-app Purchase
Windows Phone 8 - 16 Wallet and In-app PurchaseWindows Phone 8 - 16 Wallet and In-app Purchase
Windows Phone 8 - 16 Wallet and In-app Purchase
Oliver Scheer
 
Windows Phone 8 - 12 Network Communication
Windows Phone 8 - 12 Network CommunicationWindows Phone 8 - 12 Network Communication
Windows Phone 8 - 12 Network Communication
Oliver Scheer
 
Windows Phone 8 - 11 App to App Communication
Windows Phone 8 - 11 App to App CommunicationWindows Phone 8 - 11 App to App Communication
Windows Phone 8 - 11 App to App Communication
Oliver Scheer
 
Windows Phone 8 - 10 Using Phone Resources
Windows Phone 8 - 10 Using Phone ResourcesWindows Phone 8 - 10 Using Phone Resources
Windows Phone 8 - 10 Using Phone Resources
Oliver Scheer
 
Windows Phone 8 - 9 Push Notifications
Windows Phone 8 - 9 Push NotificationsWindows Phone 8 - 9 Push Notifications
Windows Phone 8 - 9 Push Notifications
Oliver Scheer
 
Windows Phone 8 - 7 Local Database
Windows Phone 8 - 7 Local DatabaseWindows Phone 8 - 7 Local Database
Windows Phone 8 - 7 Local Database
Oliver Scheer
 
Windows Phone 8 - 4 Files and Storage
Windows Phone 8 - 4 Files and StorageWindows Phone 8 - 4 Files and Storage
Windows Phone 8 - 4 Files and Storage
Oliver Scheer
 
Windows Phone 8 - 3.5 Async Programming
Windows Phone 8 - 3.5 Async ProgrammingWindows Phone 8 - 3.5 Async Programming
Windows Phone 8 - 3.5 Async Programming
Oliver Scheer
 
Windows Phone 8 - 1 Introducing Windows Phone 8 Development
Windows Phone 8 - 1 Introducing Windows Phone 8 DevelopmentWindows Phone 8 - 1 Introducing Windows Phone 8 Development
Windows Phone 8 - 1 Introducing Windows Phone 8 Development
Oliver Scheer
 
Windows Phone 8 - 4 Files and Storage
Windows Phone 8 - 4 Files and StorageWindows Phone 8 - 4 Files and Storage
Windows Phone 8 - 4 Files and Storage
Oliver Scheer
 
Windows Phone 8 - 2 Designing WP8 Applications
Windows Phone 8 - 2 Designing WP8 ApplicationsWindows Phone 8 - 2 Designing WP8 Applications
Windows Phone 8 - 2 Designing WP8 Applications
Oliver Scheer
 

Mehr von Oliver Scheer (11)

Windows Phone 8 - 16 Wallet and In-app Purchase
Windows Phone 8 - 16 Wallet and In-app PurchaseWindows Phone 8 - 16 Wallet and In-app Purchase
Windows Phone 8 - 16 Wallet and In-app Purchase
 
Windows Phone 8 - 12 Network Communication
Windows Phone 8 - 12 Network CommunicationWindows Phone 8 - 12 Network Communication
Windows Phone 8 - 12 Network Communication
 
Windows Phone 8 - 11 App to App Communication
Windows Phone 8 - 11 App to App CommunicationWindows Phone 8 - 11 App to App Communication
Windows Phone 8 - 11 App to App Communication
 
Windows Phone 8 - 10 Using Phone Resources
Windows Phone 8 - 10 Using Phone ResourcesWindows Phone 8 - 10 Using Phone Resources
Windows Phone 8 - 10 Using Phone Resources
 
Windows Phone 8 - 9 Push Notifications
Windows Phone 8 - 9 Push NotificationsWindows Phone 8 - 9 Push Notifications
Windows Phone 8 - 9 Push Notifications
 
Windows Phone 8 - 7 Local Database
Windows Phone 8 - 7 Local DatabaseWindows Phone 8 - 7 Local Database
Windows Phone 8 - 7 Local Database
 
Windows Phone 8 - 4 Files and Storage
Windows Phone 8 - 4 Files and StorageWindows Phone 8 - 4 Files and Storage
Windows Phone 8 - 4 Files and Storage
 
Windows Phone 8 - 3.5 Async Programming
Windows Phone 8 - 3.5 Async ProgrammingWindows Phone 8 - 3.5 Async Programming
Windows Phone 8 - 3.5 Async Programming
 
Windows Phone 8 - 1 Introducing Windows Phone 8 Development
Windows Phone 8 - 1 Introducing Windows Phone 8 DevelopmentWindows Phone 8 - 1 Introducing Windows Phone 8 Development
Windows Phone 8 - 1 Introducing Windows Phone 8 Development
 
Windows Phone 8 - 4 Files and Storage
Windows Phone 8 - 4 Files and StorageWindows Phone 8 - 4 Files and Storage
Windows Phone 8 - 4 Files and Storage
 
Windows Phone 8 - 2 Designing WP8 Applications
Windows Phone 8 - 2 Designing WP8 ApplicationsWindows Phone 8 - 2 Designing WP8 Applications
Windows Phone 8 - 2 Designing WP8 Applications
 

Kürzlich hochgeladen

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Kürzlich hochgeladen (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 

Windows Phone 8 - 15 Location and Maps

  • 1. Oliver Scheer Senior Technical Evangelist Microsoft Deutschland http://the-oliver.com Location and Maps
  • 2. Agenda Location and Maps on Windows Phone 8 Introducing the new Location API and the new Maps Controls Windows Phone Runtime Location API How to Get the Phone’s Current Location How to Continuously Track the Phone’s Location How to Run Location-Tracking Apps in the Background Getting Started with the New Map Control Specifying Map Center and Zoom Animating Map Display Using Map Views
  • 4. Location APIs on Windows Phone 8 • .NET Location API from Windows Phone OS 7.1 is still supported • System.Device.Location.GeoCoordinateWatcher and related classes • New Windows Phone Runtime location API • Accessible from managed and native code • Improved ability for one-shot location acquisition • Improved capabilities for location tracking • Convergent with Windows 8 location API
  • 5. ID_CAP_LOCATION Capability • You must include the ID_CAP_LOCATION capability in your app manifest • If you forget, calls to location APIs throw an UnauthorizedAccessException 3/19/20145
  • 6. Location Sources Location Services + Accuracy - Power - Speed - Indoors - Accuracy + Power + Speed - Wilderness +/- Accuracy +/- Power +/- Speed +/- Urban areas GPS Cell Towers WiFi
  • 7. • You can’t! • You can set the DesiredAccuracy property of the Geolocator object: • PositionAccuracy.High – if you want the most accurate data available, but at the cost of increased battery usage, network bandwidth and possibly monetary charges from wireless network operators. Often this causes the GPS to be activated • PositionAccuracy.Default – to optimize for power • You can also set the DesiredAccuracyInMeters property to indicate to the Geolocation service the desired accuracy of any results • However, the Geolocation service determines the best location data to provide to the application Controlling the Sources the Geolocation Service Uses 3/19/2014‹#›
  • 8. How to Get the Phone’s Current Location private async void OneShotLocation_Click(object sender, RoutedEventArgs e) { Geolocator geolocator = new Geolocator(); geolocator.DesiredAccuracyInMeters = 50; try { Geoposition geoposition = await geolocator.GetGeopositionAsync( maximumAge: TimeSpan.FromMinutes(5), timeout: TimeSpan.FromSeconds(10) ); LatitudeTextBlock.Text = geoposition.Coordinate.Latitude.ToString("0.00"); LongitudeTextBlock.Text = geoposition.Coordinate.Longitude.ToString("0.00"); } catch (UnauthorizedAccessException) { // the app does not have the right capability or the location master switch is off StatusTextBlock.Text = "location is disabled in phone settings."; } }
  • 9. User Consent • Application certification requirements on user consent still the same as in 7.1 • If you are using location data just within your app, you do not need to ask explicitly for user consent (although they give consent when they install your app) • You only have to get user consent if you plan to make location data available to any other service or other person: 2.7.4 If your application publishes or makes available location data obtained from the Location Service API to any other service or other person (including advertising networks), your application must implement a method to obtain opt-in consent. … 3/19/20149
  • 10. • Windows Phone Emulator comes with Location simulator Location on Emulator 10
  • 11. 11 Demo 1 Get Phone Position and Location Emulator
  • 12. • If your app only needs the user’s location at the current time, use GetGeopositionAsync as already described • Continuously tracking the user’s location drains the user’s battery more and should only be used for apps that require it Location Tracking 3/19/2014Microsoft confidential12
  • 13. private void TrackLocation_Click(object sender, RoutedEventArgs e) { if (!tracking) { geolocator = new Geolocator(); geolocator.DesiredAccuracy = PositionAccuracy.High; geolocator.MovementThreshold = 100; // The units are meters. geolocator.StatusChanged += geolocator_StatusChanged; geolocator.PositionChanged += geolocator_PositionChanged; tracking = true; } else { geolocator.PositionChanged -= geolocator_PositionChanged; geolocator.StatusChanged -= geolocator_StatusChanged; geolocator = null; tracking = false; } } How to Track Location 3/19/2014
  • 14. void geolocator_StatusChanged(Geolocator sender, StatusChangedEventArgs args) { string status = ""; switch (args.Status) { case PositionStatus.Disabled: // the application does not have the right capability or the location master switch is off status = "location is disabled in phone settings"; break; case PositionStatus.Initializing: // the geolocator started the tracking operation status = "initializing"; break; case PositionStatus.NoData: // the location service was not able to acquire the location status = "no data"; break; Geolocator Status 3/19/2014Microsoft confidential14
  • 15. void geolocator_StatusChanged(Geolocator sender, StatusChangedEventArgs args) { string status = ""; switch (args.Status) { case PositionStatus.Disabled: // the application does not have the right capability or the location master switch is off status = "location is disabled in phone settings"; break; case PositionStatus.Initializing: // the geolocator started the tracking operation status = "initializing"; break; case PositionStatus.NoData: // the location service was not able to acquire the location status = "no data"; break; case PositionStatus.Ready: Geolocator Status
  • 16. void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args) { Dispatcher.BeginInvoke(() => { LatitudeTextBlock.Text = args.Position.Coordinate.Latitude.ToString("0.00"); LongitudeTextBlock.Text = args.Position.Coordinate.Longitude.ToString("0.00"); }); } Position Changed 3/19/2014Microsoft confidential16
  • 18. • Normally, when your user navigates away from your app, it is made dormant and all activity – including location tracking – is suspended • In Windows Phone 8, a location-tracking app can continue to run in the background after the user navigates away, as long as the app continues to actively track location • This feature enables scenarios such as an app that provides turn-by-turn directions or a run tracker Enable Location Tracking in the Background 3/19/2014Microsoft confidential18
  • 19. • Edit WMAppManifest.xml using the XML (Text) Editor • Replace <DefaultTask> element as shown Enable Background Execution 19
  • 20. • In App.Xaml, register an event handler for the RunningInBackground event • This event is raised when the user navigates away from your background execution-enabled app while you are actively tracking location • When this event is raised, your app should stop all tasks that are not related to location tracking, including updates to the app’s UI <Application.ApplicationLifetimeObjects> <!--Required object that handles lifetime events for the application--> <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing“ Activated="Application_Activated" Deactivated="Application_Deactivated“ RunningInBackground="Application_RunningInBackground"/> </Application.ApplicationLifetimeObjects> Register Event Handler for RunningInBackground Event 3/19/2014Microsoft confidential20
  • 21. // Static variables global to application to support tracking public static Geolocator Geolocator { get; set; } public static bool RunningInBackground { get; set; } // Code to execute when the application is activated (brought to foreground) private void Application_Activated(object sender, ActivatedEventArgs e) { RunningInBackground = false; } // Code to execute when the application is deactivated and is tracking location private void Application_RunningInBackground(object sender, RunningInBackgroundEventArgs e) { RunningInBackground = true; // Suspend all unnecessary processing such as UI updates } Implement RunningInBackground Event Handler 3/19/2014Microsoft confidential21
  • 22. void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args) { if (!App.RunningInBackground) { Dispatcher.BeginInvoke(() => { LatitudeTextBlock.Text = args.Position.Coordinate.Latitude.ToString("0.00"); LongitudeTextBlock.Text = args.Position.Coordinate.Longitude.ToString("0.00"); }); } else { // DEMO purposes only: Show toast if running in background Microsoft.Phone.Shell.ShellToast toast = new Microsoft.Phone.Shell.ShellToast(); toast.Content = args.Position.Coordinate.Latitude.ToString("0.00"); toast.Title = "Location: "; toast.NavigationUri = new Uri("/Page2.xaml", UriKind.Relative); toast.Show(); } } Do Not Update UI When Running in the Background Example
  • 24. • As we have seen, Background Location Tracking apps continue to run in the background • But if it is not actively tracking location when deactivated, it is made dormant as normal • If the user launches *another* location tracking app and deactivates that, then your app will be made dormant • If the user launches a new instance of the app, if there is a dormant instance, that is reactivated instead • Background Location Tracking apps get the Fast Application Resume behavior, which reactivates a dormant application if the user launches a new copy • The dormant instance of the app, including the history of visited app pages, is reactivated • By default, the list of previously visited pages is cleared for these ‘Reset’ activations • This may not be what you want… App Lifecycle for Background Location Tracking Apps Fast Application Resume 3/19/2014Microsoft confidential24
  • 25. private void InitializePhoneApplication() { ... // Handle reset requests for clearing the backstack RootFrame.Navigated += CheckForResetNavigation; ... } private void CheckForResetNavigation(object sender, NavigationEventArgs e) { // If the app has received a 'reset' navigation, then we need to check // on the next navigation to see if the page stack should be reset if (e.NavigationMode == NavigationMode.Reset) RootFrame.Navigated += ClearBackStackAfterReset; } Clearing Previously Launched Pages on Fast App Resume Add Logic to App.Xaml.cs to Check for Reset Navigation (Behavior Already Implemented in Project Templates) 3/19/2014Microsoft confidential25
  • 26. private void InitializePhoneApplication() { ... // Handle reset requests for clearing the backstack RootFrame.Navigated += CheckForResetNavigation; ... } private void CheckForResetNavigation(object sender, NavigationEventArgs e) { // If the app has received a 'reset' navigation, then we need to check // on the next navigation to see if the page stack should be reset if (e.NavigationMode == NavigationMode.Reset) RootFrame.Navigated += ClearBackStackAfterReset; } private void ClearBackStackAfterReset(object sender, NavigationEventArgs e) Clearing Previously Launched Pages on Fast App Resume Add Logic to App.Xaml.cs to Check for Reset Navigation (Behavior Already Implemented in Project Templates) 3/19/2014Microsoft confidential26
  • 27. Maps
  • 28. Maps APIs on Windows Phone 8 • Windows Phone 8 has new Map controls, accessible in the following namespaces: • Microsoft.Phone.Maps • Microsoft.Phone.Maps.Controls • Microsoft.Phone.Maps.Services • The Bing Maps Control is still supported, but is deprecated • You should only use the Bing Maps Control when you upgrade an app from Windows Phone OS 7.1 to Windows Phone 8 • Usage of the new Maps control differs from the Bing Maps control
  • 29. ID_CAP_MAP Capability • You must include the ID_CAP_MAP capability in your app manifest • If you forget, calls to location APIs throw an UnauthorizedAccessException 3/19/201429
  • 30. • Add a Map to your UI • In XAML: <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <maps:Map x:Name="MyMap"/> </Grid> • In Code: private void CreateMap() { Map MyMap = new Map(); ContentPanel.Children.Add(MyMap); } Map Control
  • 31. • By default, map displays at zoom level 1 (world view) and centered at Lat: 0, Long: 0 • Use the Center and ZoomLevel properties to change this, in XAML or in code //Set the Map center by using Center property MyMap.Center = new GeoCoordinate(47.6097, -122.3331); //Set the map zoom by using ZoomLevel property MyMap.ZoomLevel = 10; Center and Zoom Level 3/19/2014Microsoft confidential31
  • 32. • It is common to move a map display from one location to another • A new map view is defined any time the position of the map is changed as a result of panning, zooming, rotating, or tilting • You can use the SetView method to define a map view. This takes the following parameters: • Center: A GeoCoordiante object defining the center of the map view • ZoomLevel: zoom level between 1 and 20 • Heading: specifies the directional heading that is pointing “up” on the mapin geometric degrees between 0 and 360 • Pitch: specifies the degree to which the map is tilted as a value between 0 and 180 • BoundingRectangle: a LocationRectangle object that contains the Map control • AnimationKind: sets the kind of animation you want to see (None, Linear or Parabolic) when the view changes MapViews 3/19/2014Microsoft confidential32
  • 33. • Set the cartographic mode of the map with the CartographicMode property Cartographic Mode 3/19/2014Microsoft confidential33 Road (default) Aerial Hybrid Terrain
  • 34. • You can display the map in a light or dark color mode by setting the ColorMode property Light and Dark Color Modes 3/19/2014Microsoft confidential34 Light (default) Dark
  • 35. • You can display additional elements on your map, such as landmarks and pedestrian features • Set the LandmarksEnabled property to true to display landmarks • Set the PedestrianFeaturesEnabled to true to display pedestrian features • Landmarks are visible only when the ZoomLevel is 7 or higher, and the Pitch property is 25 or higher Pedestrian Features and Landmarks 3/19/2014Microsoft confidential35
  • 37. • Unlike the Bing Maps API, the Windows Phone Maps API does not have a specific PushPin object • However, you can create your own PushPins by drawing UIElements onto a MapOverlay, then add the MapOverlay to a MapLayer which you add to the Map Pushpins 3/19/2014Microsoft confidential37
  • 38. private Grid CreatePushpin() { //Creating a Grid element. Grid MyGrid = new Grid(); MyGrid.RowDefinitions.Add(new RowDefinition()); MyGrid.RowDefinitions.Add(new RowDefinition()); MyGrid.Background = new SolidColorBrush(Colors.Transparent); //Creating a Rectangle Rectangle MyRectangle = new Rectangle(); MyRectangle.Fill = new SolidColorBrush(Colors.Black); MyRectangle.Height = 20; MyRectangle.Width = 20; MyRectangle.SetValue(Grid.RowProperty, 0); MyRectangle.SetValue(Grid.ColumnProperty, 0); //Adding the Rectangle to the Grid MyGrid.Children.Add(MyRectangle); Creating a Pushpin 3/19/2014Microsoft confidential38
  • 39. private Grid CreatePushpin() { //Creating a Grid element. Grid MyGrid = new Grid(); MyGrid.RowDefinitions.Add(new RowDefinition()); MyGrid.RowDefinitions.Add(new RowDefinition()); MyGrid.Background = new SolidColorBrush(Colors.Transparent); //Creating a Rectangle Rectangle MyRectangle = new Rectangle(); MyRectangle.Fill = new SolidColorBrush(Colors.Black); MyRectangle.Height = 20; MyRectangle.Width = 20; MyRectangle.SetValue(Grid.RowProperty, 0); MyRectangle.SetValue(Grid.ColumnProperty, 0); //Adding the Rectangle to the Grid MyGrid.Children.Add(MyRectangle); Creating a Pushpin 3/19/2014Microsoft confidential39
  • 40. private void AddMapOverlay() { Grid MyGrid = CreatePushpin(); //Creating a MapOverlay and adding the Grid to it. MapOverlay MyOverlay = new MapOverlay(); MyOverlay.Content = MyGrid; MyOverlay.GeoCoordinate = new GeoCoordinate(47.6097, -122.3331); MyOverlay.PositionOrigin = new Point(0, 0.5); //Creating a MapLayer and adding the MapOverlay to it MapLayer MyLayer = new MapLayer(); MyLayer.Add(MyOverlay); MyMap.Layers.Add(MyLayer); } Drawing a UIElement onto a MapLayer 3/19/2014Microsoft confidential40
  • 42. New Maps Launchers in Windows Phone 8.0
  • 43. MapsTask MapsTask makes launching the built-in Maps application easy MapsTask mapsTask = new MapsTask(); //Omit the Center property to use the user's current location. mapsTask.Center = new GeoCoordinate(47.6204, -122.3493); mapsTask.SearchTerm = "coffee"; mapsTask.ZoomLevel = 17; mapsTask.Show();
  • 44. • Launching built-in Maps tasks with directions enabled is trivial too! MapsDirectionsTask 44 // Get Directions MapsDirectionsTask mapsDirectionsTask = new MapsDirectionsTask(); // You can specify a label and a geocoordinate for the end point. // GeoCoordinate spaceNeedleLocation = new GeoCoordinate(47.6204,-122.3493); // LabeledMapLocation spaceNdleLML = new LabeledMapLocation("Space Needle", spaceNeedleLocation); // If you set the geocoordinate parameter to null, the label parameter // is used as a search term. LabeledMapLocation spaceNdleLML = new LabeledMapLocation("Space Needle", null); // If mapsDirectionsTask.Start is not set, the user's current location // is used as start point. mapsDirectionsTask.End = spaceNdleLML; mapsDirectionsTask.Show();
  • 45. • Use the map downloader task to enable users to download map data for offline use • The task launches the Maps settings application which allows the user to select a region of map data to download MapDownloaderTask MapDownloaderTask mapDownloaderTask = new MapDownloaderTask(); mapDownloaderTask.Show();
  • 46. • Use the map updater task to enable users to update map data they have previously downloaded for offline use • The task launches the Maps settings application which immediately checks to see if there are updates available for any previously downloaded map data MapUpdaterTask MapUpdaterTask mapUpdaterTask = new MapUpdaterTask(); mapUpdaterTask.Show();
  • 48. Review • Windows Phone Runtime location API is new in Windows Phone 8. It has the following features: • Accessible from managed and native code • Greater support for one-shot location acquisition • Support for Background Location Tracking • Convergent with Windows 8 • Use the new Maps APIs in Windows Phone 8 to develop maps-based apps, and incorporate location and search features • Set Center and Zoom Level • Animate to new location and zoom using map views • Select Road, Aerial, Hybrid or Terrain cartographic display modes • Draw UIElements onto a MapOverlay on top of the Map
  • 49. The information herein is for informational purposes only an represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.