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,如需转载请自行联系原作者





相关文章
|
定位技术 API 开发工具
Android 按照步骤接入百度地图API,定位显示不了解决办法
Android 按照步骤接入百度地图API,定位显示不了解决办法
379 1
|
7月前
|
XML Java Android开发
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
906 0
|
3月前
|
定位技术 Android开发 iOS开发
引入百度地图,安卓出现白屏问题
引入百度地图,安卓出现白屏问题
180 57
|
6月前
|
Android开发 Kotlin
Android面试题 之 Kotlin DataBinding 图片加载和绑定RecyclerView
本文介绍了如何在Android中使用DataBinding和BindingAdapter。示例展示了如何创建`MyBindingAdapter`,包含一个`setImage`方法来设置ImageView的图片。布局文件使用`&lt;data&gt;`标签定义变量,并通过`app:image`调用BindingAdapter。在Activity中设置变量值传递给Adapter处理。此外,还展示了如何在RecyclerView的Adapter中使用DataBinding,如`MyAdapter`,在子布局`item.xml`中绑定User对象到视图。关注公众号AntDream阅读更多内容。
99 1
|
开发工具 Android开发 iOS开发
使用xamarin开发Android、iOS报错failed to open directory: 系统找不到指定的文件
使用vs2019学习xamarin时,创建新程序。使用模拟器真机等测试都报错如下图错误: ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231030-de8ce5fd.png?x-cos-security-token=r4KyZDEowPT0kGTL0LqE8EnwfN1Nzexadb05dcffed3939ff8d7591c528c01706nvpGSE93QwHpZM8NwhJNTZctNRQa0l3KDhEnqj8P7d8t
124 0
使用xamarin开发Android、iOS报错failed to open directory: 系统找不到指定的文件
|
Java 定位技术 API
Android探索之百度地图开发
Android探索之百度地图开发
|
Android开发
深入剖析Android四大组件(二)——Service服务之启动与绑定(二)
深入剖析Android四大组件(二)——Service服务之启动与绑定(二)
291 1
深入剖析Android四大组件(二)——Service服务之启动与绑定(二)
|
定位技术 API Android开发
Android Studio进行APP设计调用百度地图API接口隐藏百度地图的logo方法
Android Studio进行APP设计调用百度地图API接口隐藏百度地图的logo方法
392 0
Android Studio进行APP设计调用百度地图API接口隐藏百度地图的logo方法
|
存储 定位技术 Android开发
安卓百度地图给Marker点添加InfoWindow(弹窗)
安卓百度地图给Marker点添加InfoWindow
600 0
安卓百度地图给Marker点添加InfoWindow(弹窗)
|
Android开发
深入剖析Android四大组件(二)——Service服务之启动与绑定(一)
深入剖析Android四大组件(二)——Service服务之启动与绑定(一)
272 0
深入剖析Android四大组件(二)——Service服务之启动与绑定(一)