Open the map app
This article describes how you can use the .NET Multi-platform App UI (.NET MAUI) IMap interface. This interface enables an application to open the installed map application to a specific location or place mark.
The default implementation of the IMap
interface is available through the Map.Default property. Both the IMap
interface and Map
class are contained in the Microsoft.Maui.ApplicationModel
namespace.
Get started
To access the browser functionality, the following platform-specific setup is required.
Android uses the geo:
URI scheme to launch the maps application on the device. This may prompt the user to select from an existing app that supports this URI scheme. Google Maps supports this scheme.
In the Platforms/Android/AndroidManifest.xml file, add the following queries/intent
nodes to the manifest
node:
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="geo"/>
</intent>
</queries>
Using the map
The map functionality works by calling the IMap.OpenAsync method, and passing either an instance of the Location or Placemark type. The following example opens the installed map app at a specific GPS location:
public async Task NavigateToBuilding25()
{
var location = new Location(47.645160, -122.1306032);
var options = new MapLaunchOptions { Name = "Microsoft Building 25" };
try
{
await Map.Default.OpenAsync(location, options);
}
catch (Exception ex)
{
// No map application available to open
}
}
Tip
The Location
and Placemark
types are in the Microsoft.Maui.Devices.Sensors
namespace.
When you use a Placemark
to open the map, more information is required. The information helps the map app search for the place you're looking for. The following information is required:
public async Task NavigateToBuilding()
{
var placemark = new Placemark
{
CountryName = "United States",
AdminArea = "WA",
Thoroughfare = "Microsoft Building 25",
Locality = "Redmond"
};
var options = new MapLaunchOptions { Name = "Microsoft Building 25" };
try
{
await Map.Default.OpenAsync(placemark, options);
}
catch (Exception ex)
{
// No map application available to open or placemark can not be located
}
}
Testing if the map opened
There's always the possibility that opening the map app failed, such as when there isn't a map app or your app doesn't have the correct permissions. For each IMap.OpenAsync method overload, there's a corresponding IMap.TryOpenAsync method, which returns a Boolean value indicating that the map app was successfully opened. The following code example uses the TryOpenAsync
method to open the map:
var location = new Location(47.645160, -122.1306032);
var options = new MapLaunchOptions { Name = "Microsoft Building 25" };
if (await Map.Default.TryOpenAsync(location, options) == false)
{
// Map failed to open
}
Extension methods
As long as the Microsoft.Maui.Devices.Sensors
namespace is imported, which a new .NET MAUI project automatically does, you can use the built-in extension method OpenMapsAsync
to open the map:
public async Task NavigateToBuildingByPlacemark()
{
var placemark = new Placemark
{
CountryName = "United States",
AdminArea = "WA",
Thoroughfare = "Microsoft Building 25",
Locality = "Redmond"
};
var options = new MapLaunchOptions { Name = "Microsoft Building 25" };
try
{
await placemark.OpenMapsAsync(options);
}
catch (Exception ex)
{
// No map application available to open or placemark can not be located
}
}
Add navigation
When you open the map, you can calculate a route from the device's current location to the specified location. Pass the MapLaunchOptions type to the Map.OpenAsync
method, specifying the navigation mode. The following example opens the map app and specifies a driving navigation mode:
public async Task DriveToBuilding25()
{
var location = new Location(47.645160, -122.1306032);
var options = new MapLaunchOptions { Name = "Microsoft Building 25",
NavigationMode = NavigationMode.Driving };
try
{
await Map.Default.OpenAsync(location, options);
}
catch (Exception ex)
{
// No map application available to open
}
}
Platform differences
This section describes the platform-specific differences with the maps API.
NavigationMode
supports Bicycling, Driving, and Walking.