先下载百度地图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”: 成员名不能与它们的封闭类型相同

打开项目中的TransformsMetadate.xml,在节点添加如下代码

  <
attr
 
path
=
"
/api/package[@name='com.baidu.mapapi']/class[@name='VersionInfo']/field[@name='VERSION_INFO']
"
 
name
=
"
name
"
>
VersionInfos


因为在C#中不能定义和类名相同的类成员(构造函数除外)

  • 创建andorid项目

在项目中创建一个libs文件夹,把下载的百度地图包中的.so文件添加进来,并在属性上设置成AndroidNativeLibrary

      Xamarin只言片语4——Xamarin.Android百度地图绑定_第1张图片                      

添加权限和设置百度地图访问应用Key


                 
        
        
        
        
        
        
        
        
        
        
        
在布局文件中添加地图控件(注意大小写:)
    


C#代码如下

 

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Widget;
using Android.OS;
using Com.Baidu.Mapapi.Map;
using Com.Baidu.Mapapi;
using Android.Locations;
using Com.Baidu.Mapapi.Model;
 
namespace BaiduMapDemo
{
    [Activity(Label = "BaiduMapDemo", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity, ILocationListener//为安卓定位接口
    { 
        LocationManager locMgr;
        MapView mMapView ;
        BaiduMap mBaiduMap ;
 
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            //初台化地图,注意位置,在SetContentView前
            SDKInitializer.Initialize(Application.Context);
            SetContentView(Resource.Layout.Main);
            mMapView = FindViewById(Resource.Id.bmapView);
  
            mBaiduMap = mMapView.Map;
            //普通地图
            mBaiduMap.MapType = BaiduMap.MapTypeNormal;
         
         }
        protected override void OnResume()
        {
            base.OnResume();
 
            locMgr = GetSystemService(Context.LocationService) as LocationManager;
 
 
            Criteria locationCriteria = new Criteria();
            locationCriteria.Accuracy = Accuracy.Coarse;
            locationCriteria.PowerRequirement = Power.Medium;
 
            locationCriteria.AltitudeRequired = false;//海拔
            locationCriteria.BearingRequired = false;//方位/方向
            locationCriteria.SpeedRequired = false;//速度
            locationCriteria.CostAllowed = true;//成本
 
            var locationProvider = locMgr.GetBestProvider(locationCriteria, true);
         
            if (locationProvider != null)
            {
                locMgr.RequestLocationUpdates(locationProvider, 2000, 1, this);
            }
            else
            {
                Toast.MakeText(this, "The Network Provider does not exist or is not enabled!", ToastLength.Long).Show();
            }
 
        }
        protected override void OnStart()
        {
            base.OnStart();
        }
        protected override void OnStop()
        {
            base.OnStop();
        }
        protected override void OnPause()
        {
            base.OnPause();
            locMgr.RemoveUpdates(this);
        }
 
        /// 
        /// 实现ILocationListener中方法,位置改变
        /// 
        /// 
        public void OnLocationChanged(Location location)
        {
            var point = new LatLng(location.Latitude, location.Longitude);
            //使地图移动到当前位置
            MapStatus mMapStatus = new MapStatus.Builder()
                .Target(point)
                .Zoom(12)
                .Build();
 
            //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化  
 
            MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.NewMapStatus(mMapStatus);
            //改变地图状态  
            mBaiduMap.SetMapStatus(mMapStatusUpdate);
 
             //创建当前位置Marker图标  
            BitmapDescriptor bitmap = BitmapDescriptorFactory
                .FromResource(Resource.Drawable.icon_gcoding);
            //构建MarkerOption,用于在地图上添加Marker  
            OverlayOptions option = new MarkerOptions()
                .InvokePosition(point)
                .InvokeIcon(bitmap);
            //在地图上添加Marker,并显示  
            mBaiduMap.AddOverlay(option);
 
        }
        /// 
        /// 实现ILocationListener中方法
        /// 
        /// 
        public void OnProviderDisabled(string provider)
        {            
        }
        /// 
        /// 实现ILocationListener中方法
        /// 
        /// 
        public void OnProviderEnabled(string provider)
        {          
        }
        /// 
        /// 实现ILocationListener中方法
        /// 
        /// 
        /// 
        /// 
        public void OnStatusChanged(string provider, [GeneratedEnum] Availability status, Bundle extras)
        {            
        }
    }
}