Xamarin只言片语4——Xamarin.Android百度地图绑定
先下载百度地图http://lbsyun.baidu.com/sdk/download?selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool
百度地图绑定库文件
新建一个BindingsLibrary项目,并把刚下载的BaiduLBS_Android.jar添加到项目的Jars文件夹下,更改BaiduLBS_Android.jar的属性中的”生成操作”属性为EmbeddedJar
生成些项目,如果遇到这样的错误:
VersionInfo”: 成员名不能与它们的封闭类型相同
打开项目中的Transforms的Metadate.xml,在<metadata>节点添加如下代码
<attrpath="/api/package[@name='com.baidu.mapapi']/class[@name='VersionInfo']/field[@name='VERSION_INFO']"name="name">VersionInfos</attr>
因为在C#中不能定义和类名相同的类成员(构造函数除外)
创建andorid项目
在项目中创建一个libs文件夹,把下载的百度地图包中的.so文件添加进来,并在属性上设置成AndroidNativeLibrary
添加权限和设置百度地图访问应用Key
<applicationandroid:label="BaiduMapDemo"android:icon="@drawable/Icon"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="这个需要注册百度开放平台申请Android的Key"/></application><uses-permissionandroid:name="android.permission.ACCESS_MOCK_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><uses-permissionandroid:name="android.permission.INTERNET"/><!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!--用于读取手机当前的状态--><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"></uses-permission><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>在布局文件中添加地图控件(注意大小写:)<com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true"/>
C#代码如下
usingAndroid.App;usingAndroid.Content;usingAndroid.Runtime;usingAndroid.Widget;usingAndroid.OS;usingCom.Baidu.Mapapi.Map;usingCom.Baidu.Mapapi;usingAndroid.Locations;usingCom.Baidu.Mapapi.Model;namespaceBaiduMapDemo{[Activity(Label="BaiduMapDemo",MainLauncher=true,Icon="@drawable/icon")]publicclassMainActivity:Activity,ILocationListener//为安卓定位接口{LocationManagerlocMgr;MapViewmMapView;BaiduMapmBaiduMap;protectedoverridevoidOnCreate(Bundlebundle){base.OnCreate(bundle);//初台化地图,注意位置,在SetContentView前SDKInitializer.Initialize(Application.Context);SetContentView(Resource.Layout.Main);mMapView=FindViewById<MapView>(Resource.Id.bmapView);mBaiduMap=mMapView.Map;//普通地图mBaiduMap.MapType=BaiduMap.MapTypeNormal;}protectedoverridevoidOnResume(){base.OnResume();locMgr=GetSystemService(Context.LocationService)asLocationManager;CriterialocationCriteria=newCriteria();locationCriteria.Accuracy=Accuracy.Coarse;locationCriteria.PowerRequirement=Power.Medium;locationCriteria.AltitudeRequired=false;//海拔locationCriteria.BearingRequired=false;//方位/方向locationCriteria.SpeedRequired=false;//速度locationCriteria.CostAllowed=true;//成本varlocationProvider=locMgr.GetBestProvider(locationCriteria,true);if(locationProvider!=null){locMgr.RequestLocationUpdates(locationProvider,2000,1,this);}else{Toast.MakeText(this,"TheNetworkProviderdoesnotexistorisnotenabled!",ToastLength.Long).Show();}}protectedoverridevoidOnStart(){base.OnStart();}protectedoverridevoidOnStop(){base.OnStop();}protectedoverridevoidOnPause(){base.OnPause();locMgr.RemoveUpdates(this);}///<summary>///实现ILocationListener中方法,位置改变///</summary>///<paramname="location"></param>publicvoidOnLocationChanged(Locationlocation){varpoint=newLatLng(location.Latitude,location.Longitude);//使地图移动到当前位置MapStatusmMapStatus=newMapStatus.Builder().Target(point).Zoom(12).Build();//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化MapStatusUpdatemMapStatusUpdate=MapStatusUpdateFactory.NewMapStatus(mMapStatus);//改变地图状态mBaiduMap.SetMapStatus(mMapStatusUpdate);//创建当前位置Marker图标BitmapDescriptorbitmap=BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_gcoding);//构建MarkerOption,用于在地图上添加MarkerOverlayOptionsoption=newMarkerOptions().InvokePosition(point).InvokeIcon(bitmap);//在地图上添加Marker,并显示mBaiduMap.AddOverlay(option);}///<summary>///实现ILocationListener中方法///</summary>///<paramname="provider"></param>publicvoidOnProviderDisabled(stringprovider){}///<summary>///实现ILocationListener中方法///</summary>///<paramname="provider"></param>publicvoidOnProviderEnabled(stringprovider){}///<summary>///实现ILocationListener中方法///</summary>///<paramname="provider"></param>///<paramname="status"></param>///<paramname="extras"></param>publicvoidOnStatusChanged(stringprovider,[GeneratedEnum]Availabilitystatus,Bundleextras){}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。