マップ アプリを開く

Browse sample. サンプルを参照する

この記事では、.NET Multi-Platform App UI (.NET MAUI) の IMap インターフェイスを使用する方法について説明します。 このインターフェイスを使用すると、アプリケーションから、インストールされたマップ アプリケーションに特定の場所またはプレース マークを開くことができます。

IMap インターフェイスの既定の実装は、Map.Default プロパティを通じて使用できます。 IMap インターフェイスと Map クラスはどちらも Microsoft.Maui.ApplicationModel 名前空間に含まれています。

作業の開始

ブラウザーの機能にアクセスするには、次のプラットフォーム固有のセットアップが必要です。

Android では、geo: URI スキームを使用して、デバイス上のマップ アプリケーションを起動します。 これにより、ユーザーは、この URI スキームをサポートしている既存のアプリから選択するよう求められる場合があります。 Google マップでは、このスキームをサポートしています。

Platforms/Android/AndroidManifest.xml ファイルで、次の queries/intent ノードを manifest ノードに追加します。

<queries>
  <intent>
    <action android:name="android.intent.action.VIEW" />
    <data android:scheme="geo"/>
  </intent>
</queries>

マップの使用

マップ機能は、IMap.OpenAsync メソッドを呼び出し、Location または Placemark 型のインスタンスを渡すことで動作します。 次の例では、インストールされているマップ アプリで特定の GPS の場所を開いています。

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
    }
}

ヒント

Location 型と Placemark 型は Microsoft.Maui.Devices.Sensors 名前空間にあります。

Placemark を使用してマップを開く場合は、より多くの情報が必要です。 この情報は、探している場所をマップ アプリで検索するのに役立ちます。 必要な情報は以下のとおりです。

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
    }
}

マップが開いたかどうかをテストする

マップ アプリがない場合や、アプリに適切なアクセス許可がない場合など、マップ アプリを開くことができない可能性は常にあります。 IMap.OpenAsync メソッド オーバーロードごとに、対応する IMap.TryOpenAsync メソッドがあります。このメソッドは、マップ アプリが正常に開かれたことを示すブール値を返します。 次のコード例では、TryOpenAsync メソッドを使用してマップを開いています。

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
}

拡張メソッド

Microsoft.Maui.Devices.Sensors 名前空間がインポートされている限り (新しい .NET MAUI プロジェクトの場合は自動的にインポートされます)、組み込みの拡張メソッド OpenMapsAsync を使用してマップを開くことができます。

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
    }
}

ナビゲーションの追加

マップを開くと、デバイスの現在の場所から指定の場所までのルートを計算できます。 Map.OpenAsync メソッドに MapLaunchOptions 型を渡して、ナビゲーション モードを指定します。 次の例では、マップ アプリを開き、運転ナビゲーション モードを指定しています。

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
    }
}

プラットフォームによる違い

このセクションでは、Maps API に関するプラットフォーム固有の違いについて説明します。

NavigationMode ではサイクリング、ドライビング、徒歩がサポートされています。