在 Xamarin.Forms 中新增地圖(Xamarin Studio)

你可以使用 Xamarin Forms 在每個平臺上使用本機地圖 API。你只需從 nuget 下載 Xamarin.Forms.Maps 包並將其安裝到每個專案(包括 PCL 專案)。

地圖初始化

首先,你必須將此程式碼新增到特定於平臺的專案中。為此,你必須新增 Xamarin.FormsMaps.Init 方法呼叫,如下面的示例所示。

iOS 專案

檔案 AppDelegate.cs

[Register("AppDelegate")]
public partial class AppDelegate : Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        Xamarin.Forms.Forms.Init();
        Xamarin.FormsMaps.Init();

        LoadApplication(new App());

        return base.FinishedLaunching(app, options);
    }
}

Android 專案

檔案 MainActivity.cs

[Activity(Label = "MapExample.Droid", Icon = "@drawable/icon", Theme = "@style/MyTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);

        Xamarin.Forms.Forms.Init(this, bundle);
        Xamarin.FormsMaps.Init(this, bundle);

        LoadApplication(new App());
    }
}

平臺配置

在顯示地圖之前,某些平臺上需要其他配置步驟。

iOS 專案

在 iOS 專案中,你只需要在 Info.plist 檔案中新增 2 個條目 :

  • NSLocationWhenInUseUsageDescription 字串,值 We are using your location
  • NSLocationAlwaysUsageDescription 字串,值 Can we use your location

StackOverflow 文件

Android 專案

要使用 Google 地圖,你必須生成 API 金鑰並將其新增到專案中。按照以下說明獲取此金鑰:

  1. (可選)查詢 keytool 工具位置(預設為/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands

  2. (可選)開啟終端並轉到 keytool 位置:

    cd /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands

  3. 執行以下 keytool 命令:

    keytool -list -v -keystore "/Users/[USERNAME]/.local/share/Xamarin/Mono for Android/debug.keystore" -alias androiddebugkey -storepass android -keypass android

    顯然,[USERNAME]是你當前的使用者資料夾。你應該在輸出中得到類似的東西:

    Alias name: androiddebugkey
    Creation date: Jun 30, 2016
    Entry type: PrivateKeyEntry
    Certificate chain length: 1
    Certificate[1]:
    Owner: CN=Android Debug, O=Android, C=US
    Issuer: CN=Android Debug, O=Android, C=US
    Serial number: 4b5ac934
    Valid from: Thu Jun 30 10:22:00 EEST 2016 until: Sat Jun 23 10:22:00 EEST 2046
    Certificate fingerprints:
             MD5:  4E:49:A7:14:99:D6:AB:9F:AA:C7:07:E2:6A:1A:1D:CA
             SHA1: 57:A1:E5:23:CE:49:2F:17:8D:8A:EA:87:65:44:C1:DD:1C:DA:51:95
             SHA256: 70:E1:F3:5B:95:69:36:4A:82:A9:62:F3:67:B6:73:A4:DD:92:95:51:44:E3:4C:3D:9E:ED:99:03:09:9F:90:3F
             Signature algorithm name: SHA256withRSA
             Version: 3
    
  4. 我們在此輸出中需要的只是 SHA1 證書指紋。在我們的例子中,它等於:

    57:A1:E5:23:CE:49:2F:17:8D:8A:EA:87:65:44:C1:DD:1C:DA:51:95
    

    複製或儲存此鍵的某處。我們稍後會需要它。

  5. 轉到 Google Developers Console ,我們需要新增 Google Maps Android API ,因此請選擇它: StackOverflow 文件

  6. Google 會要求你建立一個啟用 API 的專案,請按照此提示建立專案: StackOverflow 文件 StackOverflow 文件

  7. 為你的專案啟用 Google Maps API: StackOverflow 文件 啟用 api 後,你必須為你的應用建立憑據。按照這個提示: StackOverflow 文件

  8. 在下一頁上選擇 Android 平臺,點選“我需要哪些憑據?” 按鈕,為你的 API 金鑰建立一個名稱,點選新增包名稱和指紋,在步驟 4 中輸入你的包裹名稱和 SHA1 指紋,最後建立一個 API 金鑰: StackOverflow 文件 要在 Xamarin Studio 中找到你的包裹名稱,請轉到你的 .Droid 解決方案 - > AndroidManifest.xml: StackOverflow 文件

  9. 建立後複製新的 API 金鑰(不要忘記按下完成按鈕)並將其貼上到 AndroidManifest.xml 檔案中: File AndroidManifest.xml StackOverflow 文件 **

    <?xml version="1.0" encoding="utf-8"?>
    <manifest
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:versionCode="1"
        android:versionName="1.0"
        package="documentation.mapexample">
        <uses-sdk
            android:minSdkVersion="15" />
        <application
            android:label="MapExample">
            <meta-data
                android:name="com.google.android.geo.API_KEY"
                android:value="AIzaSyBAg8X-t4pOIDDp3q5Ph45jKUIVjo_RnxU" />
            <meta-data
                android:name="com.google.android.gms.version"
                android:value="@integer/google_play_services_version" />
        </application>
    </manifest>        
    

    你還需要在清單中啟用一些許可權以啟用一些其他功能:

    • 訪問粗略位置
    • 訪問好位置
    • 訪問位置額外命令
    • 訪問模擬位置
    • 訪問網路狀態
    • 訪問 Wifi 狀態
    • 網際網路

    StackOverflow 文件 雖然,下載地圖資料需要最後兩個許可權。閱讀有關 Android 許可權以瞭解更多資訊。這是 Android 配置的所有步驟。

    注意 :如果你想在 Android 模擬器上執行你的應用程式,則必須在其上安裝 Google Play 服務。按照本教程在 Xamarin Android Player 上安裝 Play 服務。如果你在 Play 商店安裝後找不到 Google Play 服務更新,你可以直接從你的應用更新它,你依賴於地圖服務

新增地圖

將地圖檢視新增到跨平臺專案非常簡單。這是一個如何做到這一點的例子(我正在使用沒有 XAML 的 PCL 專案)。

PCL 專案

檔案 MapExample.cs

public class App : Application
{
    public App()
    {
        var map = new Map();
        map.IsShowingUser = true;

        var rootPage = new ContentPage();
        rootPage.Content = map;

        MainPage = rootPage;
    }
}

就這樣。現在,如果你在 iOS 或 Android 上執行你的應用程式,它會顯示地圖檢視: http://i.stack.imgur.com/7tEiq.jpg