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”: 成员名不能与它们的封闭类型相同

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   <
attr
  
path
=
"
/api/package[@ name = 'com.baidu.mapapi' ]/class[@ name = 'VersionInfo' ]/field[@ name = 'VERSION_INFO' ]
"
  
name
=
"
name
"
>
VersionInfos
</
attr
>


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

  • 创建andorid项目

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

      wKiom1YxcmmhMxEhAANNWXpvrg4488.jpg                      

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
< application  android:label = "BaiduMapDemo"  android:icon = "@drawable/Icon" >
                  < meta-data  android:name = "com.baidu.lbsapi.API_KEY"  android:value = "这个需要注册百度开放平台申请Android的Key"  />
         </ application >
         < uses-permission  android:name = "android.permission.ACCESS_MOCK_LOCATION"  />
         < uses-permission  android:name = "android.permission.ACCESS_NETWORK_STATE"  />
         < uses-permission  android:name = "android.permission.ACCESS_WIFI_STATE"  />
         < uses-permission  android:name = "android.permission.INTERNET"  />
         <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
         < uses-permission  android:name = "android.permission.CHANGE_WIFI_STATE" ></ uses-permission >
         <!-- 用于读取手机当前的状态-->
         < uses-permission  android:name = "android.permission.READ_PHONE_STATE" ></ uses-permission >
         < uses-permission  android:name = "android.permission.ACCESS_FINE_LOCATION"  />
         < uses-permission  android:name = "android.permission.ACCESS_COARSE_LOCATION"  />
在布局文件中添加地图控件(注意大小写:)
     < com.baidu.mapapi.map.MapView
         android:id = "@+id/bmapView"
         android:layout_width = "fill_parent"
         android:layout_height = "fill_parent"
         android:clickable = "true"  />


C#代码如下

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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<MapView>(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 );
         }
  
         /// <summary>
         /// 实现ILocationListener中方法,位置改变
         /// </summary>
         /// <param name="location"></param>
         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);
  
         }
         /// <summary>
         /// 实现ILocationListener中方法
         /// </summary>
         /// <param name="provider"></param>
         public  void  OnProviderDisabled( string  provider)
         {            
         }
         /// <summary>
         /// 实现ILocationListener中方法
         /// </summary>
         /// <param name="provider"></param>
         public  void  OnProviderEnabled( string  provider)
         {          
         }
         /// <summary>
         /// 实现ILocationListener中方法
         /// </summary>
         /// <param name="provider"></param>
         /// <param name="status"></param>
         /// <param name="extras"></param>
         public  void  OnStatusChanged( string  provider, [GeneratedEnum] Availability status, Bundle extras)
         {            
         }
     }
}















本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/1707541,如需转载请自行联系原作者





相关文章
|
7月前
|
Linux
百度搜索:蓝易云【Centos7系统一次性增加绑定多个IP教程。】
现在,你已经成功在CentOS 7系统上一次性增加绑定了多个IP地址。你可以使用上述步骤为每个接口添加更多的IP地址,以满足你的网络需求。请确保IP地址的设置正确,并根据网络环境和需求进行适当的配置。
159 0
|
9月前
|
定位技术 API 开发工具
Android 按照步骤接入百度地图API,定位显示不了解决办法
Android 按照步骤接入百度地图API,定位显示不了解决办法
259 0
|
Java 定位技术 API
Android--百度地图密钥申请+环境配置(一)
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/51360593 简介 在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联。
1321 0
|
8月前
|
Java 定位技术 API
Android探索之百度地图开发
Android探索之百度地图开发
|
定位技术 API Android开发
Android Studio进行APP设计调用百度地图API接口隐藏百度地图的logo方法
Android Studio进行APP设计调用百度地图API接口隐藏百度地图的logo方法
326 0
Android Studio进行APP设计调用百度地图API接口隐藏百度地图的logo方法
|
定位技术 API Android开发
安卓百度地图显示地图上所有的点(Marker)
安卓百度地图显示地图上所有的点(Marker)
282 0
|
定位技术 Android开发
安卓百度地图点击回到当前位置
安卓百度地图点击回到当前位置
223 0
|
定位技术 API Android开发
安卓百度地图的所有覆盖物
安卓百度地图的所有覆盖物
101 0
|
存储 定位技术 Android开发
安卓百度地图给Marker点添加InfoWindow(弹窗)
安卓百度地图给Marker点添加InfoWindow
512 0
安卓百度地图给Marker点添加InfoWindow(弹窗)
|
定位技术 API Android开发
安卓基于百度地图计算两个经纬度点的直线距离并只保留两位小数
安卓基于百度地图计算两个经纬度点的直线距离并只保留两位小数
329 0