在 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