Ximarin.Android 百度地图
一、工欲善其事,必先利其器
需要准备的工作和资源
百度地图SDK 该链接下是所有百度地图更新的历史版本,请根据情况下载
安全码校对工具 检测填写SHA1值是否正确
二、正文
Demo中有很多不足,为何第二次引用BaiduMap没有
如何在Xamarin.Forms中引用第三方的SDK, .OS文件怎么引用
2.1、新建项目
2.2、第二导入Jar包,并修改生成操作
2.3、如果直接生成这个地方会报一个错,我们需要修改Transforms/Metadata.xml配置文件,直接覆盖好啦
错误:versioninfo成员名称不能与它们的封闭类型相同
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<metadata> <!-- This sample removes the class: android.support.v4.content.AsyncTaskLoader.LoadTask: <remove-node path="/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']" /> This sample removes the method: android.support.v4.content.CursorLoader.loadInBackground: <remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" /> --> <attr path="/api/package[@name='com.baidu.mapapi']/class[@name='VersionInfo']/field[@name='VERSION_INFO']" name="managedName">VERSION_INFO_</attr> <!-- <attr path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/class[@name='RouteGuideParams.RGKey.CurRoadName']/field[@name='CurRoadName']" name="managedName">CurRoadName_</attr>--> <!-- <remove-node path="/api/package/class/implements[@name='android.provider.BaseColumns']" />--> <!--- <remove-node path="/api/package[@name='com.baidu.navisdk.comapi.mapcontrol']/class[@name='BNMapItemizedOverlay']" /> <remove-node path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/class[@name='BNRouteGuider']" /> --> <!-- <remove-node path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/interface[@name='IRGInfoListener']" /> --> <!--<remove-node path="/api/package[@name='Com.Baidu.Navisdk.Comapi.Routeguide']/class[@name='AssistInfoHideEventArgs']" /> --> <!--<attr path="/api/package[@name='com.baidu.location.e']" name="managedName">com.baidu.location.ea</attr> <attr path="/api/package[@name='com.baidu.location.e']" name="obfuscated" >false</attr> <attr path="/api/package[@name='com.baidu.location.e']/interface[@name='v.a']" name="visibility" >public</attr> <attr path="/api/package[@name='com.baidu.location.e']/interface[@name='v.a']" name="obfuscated" >false</attr>--> <attr path="/api/package[@name='com.baidu.mapapi.map']/interface[@name='Overlay.a']" name="obfuscated" >false</attr> <!--<attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='i']" name="visibility" >public</attr> <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='i.a']" name="obfuscated" >false</attr>--> <attr path="/api/package[@name='com.baidu.platform.comapi.util']/class[@name='PermissionCheck.b']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.util']/class[@name='PermissionCheck.b']" name="managedName">b_</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.util']/interface[@name='PermissionCheck.c']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='MapRenderer']/field[@name='a']" name="managedName">aVar</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='MapRenderer.a']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='B.b']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='b']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='f']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='z']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='y']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comjni.map.basemap']/interface[@name='b']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comjni.map.basemap']/class[@name='a']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='i']" name="obfuscated" >false</attr> <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='i']" name="visibility" >public</attr> <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='j']" name="obfuscated" >false</attr> <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='d']" name="obfuscated" >false</attr> <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='d']" name="visibility" >public</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='j.a']" name="obfuscated" >false</attr> <!--<attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='l']" name="visibility" >public</attr> <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='l.a']" name="obfuscated" >false</attr> <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='l.a']" name="visibility" >false</attr>--> <!--<attr path="/api/package[@name='com.baidu.location.e']/class[@name='v']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.location.e']/class[@name='v']" name="visibility">public</attr> <attr path="/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']" name="managedName" >address_</attr> <attr path="/api/package[@name='com.baidu.location.b']/interface[@name='b']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.location.b']/interface[@name='f']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.location.e']/class[@name='p']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.location.e']/class[@name='b.a']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.location.e']/class[@name='b.b']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.location']/class[@name='LocationClientOption']/field[@name='a']" name="visibility">public</attr> <attr path="/api/package[@name='com.baidu.location']/class[@name='a']" name="obfuscated" >false</attr> <attr path="/api/package[@name='com.baidu.location.d']/class[@name='a']" name="obfuscated" >false</attr> <attr path="/api/package[@name='com.baidu.location.e']/interface[@name='p.a']" name="obfuscated">false</attr>--> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='q']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='t']" name="obfuscated">false</attr> <!--<attr path="/api/package[@name='com.baidu.speechsynthesizer.data']/interface[@name='SpeechOfflineSynthesizer.a']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.speechsynthesizer.data']/interface[@name='SpeechOfflineSynthesizer.b']" name="obfuscated">false</attr>--> <attr path="/api/package[@name='com.baidu.vi']/class[@name='a']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.vi']/class[@name='b']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.vi']/class[@name='c']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.vi']/class[@name='c']" name="managedName">c_</attr> <!--导航--> <!--has already a definition for Tap--> <!--<attr path="/api/package[@name='com.baidu.navisdk.comapi.mapcontrol']/interface[@name='BNMapItemizedOverlay.OnTapListener']/method[@name='onTap' and count(parameter)=2]" name="argsType">TapEventArgs1</attr> <attr path="/api/package[@name='com.baidu.navisdk.comapi.mapcontrol']/interface[@name='BNMapItemizedOverlay.OnTapListener']/method[@name='onTap' and count(parameter)=2]" name="managedName">onTap1</attr> <attr path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/interface[@name='BNRouteGuider.OnRGSubStatusListener']" name="managedName">OnRGSubStatusListener1</attr>--> <!--<attr path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/interface[@name='OnRGInfoListener']" name="managedName">OnRGInfoListener1</attr> <attr path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/class[@name='RouteGuideParams.RGKey.CurRoadName']/field[@name='CurRoadName']" name="managedName">CurRoadName_</attr>--> <!--<remove-node path="/api/package[@name='java.util']/interface[@name='Comparator<Java.Lang.Object>']" />--> <!--<attr path="/api/package[@name='com.baidu.navisdk.ui.widget']/class[@name='BNHorizontalListView']/method[@name='getAdapter' and count(parameter)=0]" name="managedReturn">Java.Lang.Object</attr> <attr path="/api/package[@name='com.baidu.navisdk.ui.routeguide.model']/class[@name='RGAssistGuideModel.AssistInfo']/method[@name='compareTo' and count(parameter)=1 and parameter[1][@type='com.baidu.navisdk.ui.routeguide.model.RGAssistGuideModel.AssistInfo']]/parameter[1]" name="managedType">Java.Lang.Object</attr> --> <attr path="/api/package[@name='com.baidu.mapapi.cloud']/class[@name='VersionInfo']/field[@name='VERSION_INFO']" name="managedName">VERSION_INFO_</attr> <attr path="/api/package[@name='com.baidu.mapapi.radar']/class[@name='VersionInfo']" name="managedName">VERSION_INFO_</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='A']/field[@name='a']" name="managedName">a_</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='f']/field[@name='f']" name="managedName">f_</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.radar']/interface[@name='c']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='J']" name="managedName">J_</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='j.a']" name="obfuscated">false</attr> <!--Search--> <attr path="/api/package[@name='com.baidu.mapapi.search.core']/class[@name='g']" name="obfuscated">false</attr> <!--util--> <attr path="/api/package[@name='com.baidu.mapapi.a.a']/class[@name='a']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.mapapi.a.a']/class[@name='a']" name="managedName">a_</attr> <!--map--> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='B']/field[@name='a']" name="managedName">a_</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='c']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='i']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='i']" name="managedName">i_</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='n']" name="obfuscated">false</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='g']" name="obfuscated">false</attr> <!--<attr path="/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']" name="managedName">address_</attr> <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='d']/field[@name='d']" name="managedName">d_</attr>--> <attr path="/api/package[@name='com.baidu.mapapi.search.district']/interface[@name='OnGetDistricSearchResultListener']/method[@name='onGetDistrictResult']" name="argsType" >GetTDistrictResultEventArgs</attr> <attr path="/api/package[@name='com.baidu.mapapi.search.district']/class[@name='DistrictSearch']" name="managedName">DistrictSearch_</attr> <remove-node path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='C']" /> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='c']/method[@name='d' and count(parameter)=0]" name="managedName">d_</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='c']/method[@name='c' and count(parameter)=0]" name="managedName">c_</attr> </metadata>
2.4、成功生成项目
2.5、创建一个Xamarin.Andorid项目(目前还没有搞定Xamarin.Forms中的引用第三方SDK;如果您已经研究出来,跪求分享)
2.6、引用之前添加的Java Library项目,这个地方如果引用不了,我们可以引用其生成成功的DLL即可
2.7、我们添加两个文件并把下载的SDK中.SO文件放到目录下并且修改“生成操作”为 “AndroidNativeLibrary”
2.8、关键的两步,很多人都卡在这个地方了,把百度地图的相关配置,配置到当前项目中
配置开发KEY,配置到AssemblyInfo.cs文件中(请不要使用我的KEY)
重点 注:如何申请应用请点击这里,并正确填写包名和SHA1,不能确保100%,一定要看这个
[assembly: MetaData("com.baidu.lbsapi.API_KEY", Value = "loEVXHdyqSdhGcYZlqkMES7x")]
2.9、给当前APP相对应的权限
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="BaiduMapDemo.BaiduMapDemo" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="16" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> </manifest>
3.0 在Main.axml文件件中输入
<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
3.1 在MainActivity.cs文件中输入
博主在这个地方,第一次引用项目时
Com.Baidu.Mapapi.Map 类下面是有BaiduMap控件,但是不知道为何第二次,Jar包什么都正常,整个工程也是能运行的,但是就是没有MapView这个控件,后来也不得不换成第一生成好的DLL了
资源下载点击这里
using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; using Com.Baidu.Mapapi; using Com.Baidu.Mapapi.Map; namespace BaiduMapDemo { [Activity(Label = "BaiduMapDemo", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { MapView mMapView; BaiduMap mBaiduMap; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SDKInitializer.Initialize(Application.Context); SetContentView(Resource.Layout.Main); mMapView = FindViewById<MapView>(Resource.Id.bmapView); mBaiduMap = mMapView.Map; //普通地图 mBaiduMap.MapType = BaiduMap.MapTypeNormal; } } }
3.2 运行成功(我在模拟器上面一直报错,初始化失败,解决半天没搞定,我就直接上真机上测试,)
在真机上面我的运行环境我只保留了armeabi(还没去查这个之间的区别,但是网上是这么说的)
(QQ群)Xamarin.Forms:521288080
共同探讨摸索、共同进步