从 Xamarin.Forms 启动本机地图应用

Download Sample下载示例

每个平台上的本机地图应用都可以通过 Xamarin.EssentialsLauncher 类从 Xamarin.Forms 应用程序启动。 该类使应用程序能够通过其自定义 URI 方案打开另一个应用。 可以使用 OpenAsync 方法调用启动器功能,传入表示要打开的自定义 URL 方案的 stringUri 参数。 有关 Xamarin.Essentials的更多信息,请参见Xamarin.Essentials

注意

使用 Xamarin.EssentialsLauncher 类的替代方法是使用其 Map 类。 有关详细信息,请参阅 Xamarin.Essentials:地图

每个平台上的地图应用都使用唯一的自定义 URI 方案。 有关 iOS 上的地图 URI 方案的信息,请参阅 developer.apple.com 上的地图链接。 有关 Android 上地图 URI 方案的信息,请参阅 developers.android.com 上的地图开发人员指南适用于 Android 的 Google 地图意向。 若要了解通用 Windows 平台 (UWP) 上的地图 URI 方案,请参阅启动 Windows 地图应用

在特定位置启动地图应用

可以通过向每个地图应用的自定义 URI 方案添加适当的查询参数来打开本机地图应用中的位置:

if (Device.RuntimePlatform == Device.iOS)
{
    // https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html
    await Launcher.OpenAsync("http://maps.apple.com/?q=394+Pacific+Ave+San+Francisco+CA");
}
else if (Device.RuntimePlatform == Device.Android)
{
    // open the maps app directly
    await Launcher.OpenAsync("geo:0,0?q=394+Pacific+Ave+San+Francisco+CA");
}
else if (Device.RuntimePlatform == Device.UWP)
{
    await Launcher.OpenAsync("bingmaps:?where=394 Pacific Ave San Francisco CA");
}

此示例代码导致在每个平台上启动本机地图应用,地图以代表指定位置的图钉为中心:

Screenshot of native map app, on iOS and Android

启动包含路线的地图应用

可以通过向每个地图应用的自定义 URI 方案添加适当的查询参数来启动显示路线的本机地图应用:

if (Device.RuntimePlatform == Device.iOS)
{
    // https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html
    await Launcher.OpenAsync("http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino");
}
else if (Device.RuntimePlatform == Device.Android)
{
    // opens the 'task chooser' so the user can pick Maps, Chrome or other mapping app
    await Launcher.OpenAsync("http://maps.google.com/?daddr=San+Francisco,+CA&saddr=Mountain+View");
}
else if (Device.RuntimePlatform == Device.UWP)
{
    await Launcher.OpenAsync("bingmaps:?rtp=adr.394 Pacific Ave San Francisco CA~adr.One Microsoft Way Redmond WA 98052");
}

此示例代码导致在每个平台上启动本机地图应用,地图以指定位置之间的路线为中心:

Screenshot of native map app route, on iOS and Android