Xamarin.Forms からネイティブ マップ アプリを起動する

各プラットフォーム上のネイティブ マップ アプリは、Xamarin.EssentialsLauncher クラスによって Xamarin.Forms アプリケーションから起動できます。 このクラスを使用すると、アプリケーションは、自身のカスタム URI スキームを使用して別のアプリを開けるようになります。 起動ツールの機能は、OpenAsync メソッドを使用して呼び出し、開くカスタム URL スキームを表す string または Uri 引数を渡すことができます。 Xamarin.Essentials の詳細については、「Xamarin.Essentials」を参照してください。

Note

Xamarin.EssentialsLauncher クラスを使用する代わりに、自身の Map クラスを使用します。 詳細情報については、「Xamarin.Essentials: Map」 を参照してください。

各プラットフォーム上のマップ アプリでは、一意のカスタム URI スキームが使用されます。 iOS でのマップ URI スキームについては、developer.apple.com で、「マップ リンク」をご覧ください。 Android でのマップ URI スキームについては、developers.android.com で、「マップ 開発者ガイド」と「Android 用 Google マップ インテント」をご覧ください。 ユニバーサル Windows プラットフォーム (UWP) のマップ URI スキームについては、「Windows Maps アプリを起動する」を参照してください。

特定の場所でマップ アプリを起動する

各マップ アプリのカスタム 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");
}

次のコード例では、各プラットフォームでネイティブ マップ アプリが起動され、指定した場所を表すピンが中央に配置されたマップが表示されます。

iOS と 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");
}

次のコード例では、各プラットフォームでネイティブ マップ アプリが起動され、指定された場所間のルートが中央に配置されたマップが表示されます。

iOS と Android 上の、ネイティブ マップ アプリ ルートのスクリーンショット