在 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
Android 專案
要使用 Google 地圖,你必須生成 API 金鑰並將其新增到專案中。按照以下說明獲取此金鑰:
-
(可選)查詢 keytool 工具位置(預設為
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands
) -
(可選)開啟終端並轉到 keytool 位置:
cd /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands
-
執行以下 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
-
我們在此輸出中需要的只是 SHA1 證書指紋。在我們的例子中,它等於:
57:A1:E5:23:CE:49:2F:17:8D:8A:EA:87:65:44:C1:DD:1C:DA:51:95
複製或儲存此鍵的某處。我們稍後會需要它。
-
轉到 Google Developers Console ,我們需要新增 Google Maps Android API ,因此請選擇它:
-
Google 會要求你建立一個啟用 API 的專案,請按照此提示建立專案:
-
為你的專案啟用 Google Maps API: 啟用 api 後,你必須為你的應用建立憑據。按照這個提示:
-
在下一頁上選擇 Android 平臺,點選“我需要哪些憑據?” 按鈕,為你的 API 金鑰建立一個名稱,點選新增包名稱和指紋,在步驟 4 中輸入你的包裹名稱和 SHA1 指紋,最後建立一個 API 金鑰: 要在 Xamarin Studio 中找到你的包裹名稱,請轉到你的 .Droid 解決方案 - > AndroidManifest.xml:
-
建立後複製新的 API 金鑰(不要忘記按下完成按鈕)並將其貼上到
AndroidManifest.xml
檔案中: File AndroidManifest.xml **<?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 狀態
- 網際網路
雖然,下載地圖資料需要最後兩個許可權。閱讀有關 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