Google Play服务中包括了强大的Google Maps API,它支持开发者在安卓应用中添加丰富的交互式地图控制。然而,地图控制和API比较繁重,而有时你只想在地图上显示一些简单的标示,这时全新的Google Maps Lite模式就派上用场了,它能够提供指定位置的位图和缩放,同时也允许访问全部API的其中一部分api。
Google Maps Lite非常适合以下场景:用户不需要与地图交互、地图只需要显示某类需求或者你只需要在小地图中显示一个标示。在我的项目中,我想要创建一个app来翻阅附近的咖啡店列表,以满足我的全天侯咖啡瘾。我不想与地图交互:我只想让咖啡店的名称、排名还有距离在地图上覆盖显示。我们来看一下怎么在app中使用Google Maps Lite。
建立工程
在使用Google Play Services和Google Maps前,需要先在你的Xamarin.Android中安装Google Play Services组件或者NuGet.
获取一个Google Maps API Key
接下来需要一些人工操作来从Google上获取你的Google Maps API Key,不过,我们在文档网站上有很好的参考步骤。一旦你获得了你的key,你需要在你的AndroidManifest.xml中修改一些meta-data和permission条目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="4.5" package="com.xamarin.docs.android.mapsandlocationdemo2" android:versionCode="6"> ... <application android:label="@string/app_name"> <!-- Put your Google Maps V2 API Key here. --> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="YOUR_API_KEY" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> </manifest> |
添加简单模式地图
在地图上开启简单模式非常简单,因为Google Maps Lite和Google Maps API使用着同样的类和接口。这就表示你可以在你的MapView、MapFragment或者GoogleMap选项中添加一个简单的标志来开启简单模式。
xml属性设置
1 2 3 4 5 6 7 8 9 10 11 12 |
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.google.android.gms.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" map:cameraZoom="15" map:mapType="normal" map:liteMode="true"/> </FrameLayout> |
代码中
1 2 |
var options = new GoogleMapOptions (); options.InvokeLiteMode (true); |
初始化地图
近期,谷歌修改了用户使用Google Play服务初始化地图的方式。你需要完成以下两步来让地图显示出来。
1.)找到你的地图并创建
在你的Activity组件 OnCreate方法中,你需要找到你的MapView并调用它的OnCreate函数并给传递bundle给这个函数
1 2 |
mapView = FindViewById<MapView> (Resource.Id.map); mapView.OnCreate (bundle); |
2.)执行IOnMapReadyCallback来获取地图
为了获取你对GoogleMap的引用(通过该引用你可以添加标志和缩放),你必须在你的Activity组件中执行IOnMapReadyCallback然后调用MapView的GetMapAsync方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class MainActivity : ActionBarActivity, IOnMapReadyCallback { GoogleMap googleMap; MapView mapView; protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); SetContentView (Resource.Layout.main); mapView = FindViewById<MapView> (Resource.Id.map); mapView.OnCreate (bundle); mapView.GetMapAsync (this); } public async void OnMapReady (GoogleMap googleMap) { this.googleMap = googleMap; //Setup and customize your Google Map this.googleMap.UiSettings.CompassEnabled = false; this.googleMap.UiSettings.MyLocationButtonEnabled = false; this.googleMap.UiSettings.MapToolbarEnabled = false; } } |
移动地图到某一位置
Google Maps Lite很强大,足以让你移动视角到一个指定的位置,甚至可以控制缩放。使用Geolocator Plugin可以让你轻松放大地图到你当前的位置。
1 2 3 4 |
MapsInitializer.Initialize(this); var position = await CrossGeolocator.Current.GetPositionAsync (10000); var me = new LatLng (position.Latitude, position.Longitude); googleMap.MoveCamera (CameraUpdateFactory.NewLatLng (me)); |
注意MapsInitializer.Initialize(this);需要在你开始与地图交互前执行。
添加标记
地图运行起来后,你可以开始在地图上添加标记或者其他项目了。在这个例子中,我们在当前位置添加了一个圆形标记,还要在最近的咖啡厅上添加了大标记.
1 2 3 4 5 6 7 8 9 10 11 |
var coffeeMarker = new MarkerOptions (); coffeeMarker.SetPosition (new LatLng (coffee.Latitude, coffee.Longitude)); //add marker to map googleMap.AddMarker (coffeeMarker); var meMarker = new CircleOptions (); meMarker.InvokeCenter(me); meMarker.InvokeRadius (16); meMarker.InvokeStrokeWidth (0); meMarker.InvokeFillColor (Resources.GetColor (Resource.Color.accent)); //add circle to map googleMap.AddCircle (meMarker); |
更多资料
这段咖啡厅查询代码展示了如何基于你当前的位置使用Google Places API查询附近的咖啡厅,你可以直接使用这段代码。 还有,你也可以在Google Play上下载这款咖啡厅查找器到你的手机上。
在使用地图的简易模式时,要确保自己通读了Goolge简易模式文档并领会了所有可用的API特性。想知道如何在你的Xamarin.Android应用中轻松加入安卓位置和地图API中的更多特性,一定要去阅读我们的Xamarin文档,你就会明白。