開啟地圖應用程式

Browse sample. 流覽範例

本文說明如何使用 .NET 多平臺應用程式 UI (.NET MAUI) IMap 介面。 此介面可讓應用程式將已安裝的地圖應用程式開啟至特定位置或標記。

介面的預設實作 IMap 可透過 Map.Default 屬性取得。 IMap介面和Map類別都包含在 命名空間中Microsoft.Maui.ApplicationModel

開始使用

若要存取瀏覽器功能,需要下列平臺特定設定。

Android 會 geo: 使用 URI 配置在裝置上啟動地圖應用程式。 這可能會提示使用者從支援此 URI 配置的現有應用程式選取。 Google 地圖 支援此配置。

[平臺/Android/AndroidManifest.xml ] 檔案中,將下列 queries/intent 節點新增至 manifest 節點:

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

使用地圖

對應功能的運作方式是呼叫 IMap.OpenAsync 方法,並傳遞 或 Placemark 類型的實例Location。 下列範例會在特定 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
    }
}

提示

LocationPlacemark 型別位於 命名空間中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
    }
}

新增導覽

當您開啟地圖時,您可以計算從裝置目前位置到指定位置的路線。 將 MapLaunchOptions 類型傳遞至 Map.OpenAsync 方法,並指定流覽模式。 下列範例會開啟地圖應用程式,並指定駕駛導覽模式:

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

平台差異

本節說明地圖 API 的平臺特定差異。

NavigationMode 支援腳踏車、開車與走路。