前言:  

图片如果看不清,请右键保存,或者直接对网页进行缩放,这些都是直接在电脑上截的图,不存在看不清这种情况.

首先我要表示巨人原博文1      原博文2)的肩膀上写的这篇文章.

我的内容会更详细一点,如果你有一定的基础,请直接去看上面这两篇博文.

我这篇文章可能会比较啰嗦........总之,有图有真相,手把手教学.

文章里的所有步骤,都已经过验证.

做个标记: 本文所使用的百度地图android  sdk是2017年10月3日下载的百度android sdk, 往后sdk的内容可能会有变化.

如有变化,你按照这篇文章按步骤操作,如未成功,请在文章下面留言,我会及时更新文章,与时俱进.

效果图: 北京市的卫星图

正文:

准备工作

: 打开网址:http://lbsyun.baidu.com/     页面上角注册百度账号

. 打开网址:http://lbsyun.baidu.com/     页面上角登陆百度账号.

.    登陆成功后,点击页面上角API控制台.

四.点击创建应用

五.填写信息:

应用名称: 你自己随便写,找个记事本记下来.(我的是:XamarinBaiDuMapSDK)

应用类型:    Android SDK

*发布版SHA1: 接下来重点讲这个.

*包名:  XamarinBaiDuMapSDK.XamarinBaiDuMapSDK   (中间有个点)

这个是百度官方给的如何获取SHA1教程: http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key

六.接下来,本文的重点要出现了:获取SHA1

我们是Xamarin,所以获取的方式略有不同,其实也差不多,看你自己了,接下来,我会详细介绍一下如何取SHA1,用我自己的方式,也是xamarin的方式.

Xamarin官方参考文章在这里:    https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/MD5_SHA1/

1.找到你java jdk位置:

一般来说,在你安装vs2017 xamarin的时候,vs2017会帮你把jdk 安装在:

C:\Program Files\Java或C:\Program Files (x86)\Java  (我的是在C:\Program Files\Java)

我的vs2017现在使用的jdk版本是jdk1.8.0_112.

所以,直接点进去,进到这个文件夹:C:\Program Files\Java\jdk1.8.0_112\bin  (找个记事本,保存一下这个地址,一会儿会用到)

查看一下里面有没有keytool这个exe 文件,如果有就没任何问题了

2. 找到debug.keystore这个文件(Xamarin的debug.keystore)

我的debug.keystore是在  C:\Users\ **********\AppData\Local\Xamarin\Mono for Android  (保存这个地址到你的记事本) (这个地址,如果你找不到,请在文章下面留言)

3.打开  命令提示符(cmd) (你可以在 小娜那里搜索cmd, 或者直接在附件的windows系统里找到命令提示符)

输入:                 cd C:\Program Files\Java\jdk1.8.0_112\bin             (打开你刚才你保存的记事本,找到这个地址,前面有加 cd), 回车.

输入:      keytool.exe -list -v -keystore "%LocalAppData%\Xamarin\Mono for Android\debug.keystore"            ,回车

输入密钥库口令: android    (默认是android,除非你修改过), 回车     (请手动输入android 这7个英文字母, 不要复制,否则会出错)

找到SHA1 这一行: 复制下来,妥善保存到记事本,千万不要弄丢了,不然你还要再操作一遍,好麻烦的......

关闭命令提示符 窗口(cmd),ok,我们来做下一步.

七. 还记得刚才的网页页面吗?

填写  发布版SHA1 (到你的记事本里找一下,就是我们刚才复制的那行)

点击,提交按钮

八.保存   应用AK (妥善保存到记事本,一会儿会用到)

九. 下载BaiduMap sdk

打开网页:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download   ,点击自定义下载

你会跳转到这个页面:http://lbsyun.baidu.com/sdk/download?selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar

我是百度地图sdk 默认的那几个,图片在这里,我们一会要做的xamarin.android binding也只是针对 勾选的这几个 所生成的sdk。所以如果你乱勾选,后面可能会成功不了.

点击下载  开发包.

十. 打开这个压缩包.

十一.

分析一下这个sdk文件, 只用两种类型的文件,一种是.so 类型的,一种是.jar类型的.

jar类型,对应vs2017的生成操作是:EmbeddedJar

so类型,对应vs2017的生成操作是:EmbeddedNativeLibrary

十二.打开vs2017---文件--新建---项目--Android---绑定库(Android)---名称:  BaiDuMapBindingProject

把BaiduLBS_AndroidSDK_Lib\libs 文件夹里的所有文件都复制放到BaiDuMapBindingProject的jars 文件夹下面(全选,复制,粘贴)

然后你把so 和jar文件的生成操作给修改成,刚才我们所写的那样子.

jar类型,对应vs2017的生成操作是:EmbeddedJar

so类型,对应vs2017的生成操作是:EmbeddedNativeLibrary

请注意,每一个.so文件 ,jar文件都要做   修改 生成操作,千万要注意,一个都不能少!!!!

十三。重新生成解决方案.

出现了5 个error,91个warning

十四.安装    jar反编译软件JD-GUI

http://jd.benow.ca/

十五.让我们来解决第一个error:

错误 CS0542 “VersionInfo”: 成员名不能与它们的封闭类型相同       Com.Baidu.Mapapi.VersionInfo.cs

运行 JD-GUI  打开BaiduLBS_Android.jar (地址:BaiduLBS_AndroidSDK_Lib\libs) 文件

查看生成后的C#文件

错误很明显了,类名和类里面的常量名在 编译后,  出现了名字相同这个错误.

解决方案如下: 打开Metadata.xml

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

改一下常量名即可

VERSION_INFO ----> VersionInformation

重新生成解决方案.

十六.

让我们来解决掉剩下的四个error.


方法的重载导致的问题,方法名相同,导致编译后生成了相同名字的类.4个error一起解决.解决方案如下: 打开Metadata.xml 
  <attrpath="/api/package[@name='com.baidu.mapapi.map']/interface[@name='BaiduMap.OnMapStatusChangeListener']/method[@name='onMapStatusChangeStart' and count(parameter)=2 and parameter[1][@type='com.baidu.mapapi.map.MapStatus'] and parameter[2][@type='int']]"name="managedName">OnMapStatusChangeStart2</attr>

重新生成解决方案.

0   error  95个warning(警告,今天就不管了)

十七.取走 BaiDuMapBindingProject\bin\Debug  BaiDuMapBindingProject.dll文件(复制,找个地方保存好)

十八. 新建一个项目,vs2017----新建---项目---Android----单一视图应用(Android)----名称:BaiDuSDKDemoProject

引用,右键,浏览,添加 BaiDuMapBindingProject.dll

十九。参考百度的java文档 http://lbsyun.baidu.com/index.php?title=androidsdk/guide/hellobaidumap

在AndroidManifest.xml  (项目Properties里面寻找这个文件)   中添加开发密钥、所需权限等信息;

(1)在application中添加开发密钥

<application>  <meta-data  android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" /> </application>

还记得刚才我们保存的  访问应用(AK) 吗?开发者 key就是那个.如果你忘记保存,请自行寻找http://lbsyun.baidu.com/apiconsole/key

(2)添加所需权限

<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" />

<?xml version="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="BaiDuSDKDemoProject.BaiDuSDKDemoProject"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="16" /><applicationandroid:label="BaiDuSDKDemoProject"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="开发者 key" /></application><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permissionandroid:name="android.permission.WAKE_LOCK"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE" /><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" /><uses-permissionandroid:name="android.permission.GET_TASKS" /><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.WRITE_SETTINGS" />
</manifest>

二十.

第三步,在布局Main.axml文件中添加地图控件;

<com.baidu.mapapi.map.MapView  android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" />
</LinearLayout>

第四步,在应用程序创建时初始化 SDK引用的Context 全局变量:

public class MainActivity extends Activity {  @Override  protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); } }

注意:在SDK各功能组件使用之前都需要调用

SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中

打开MainActivity.cs文件,添加一行代码即可

using Com.Baidu.Mapapi;

protected override voidOnCreate(Bundle bundle){base.OnCreate(bundle);//Set our view from the "main" layout resource
SDKInitializer.Initialize(ApplicationContext);SetContentView(Resource.Layout.Main);}

注意:在SDK各功能组件使用之前都需要调用

SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中

第五步,创建地图Activity,管理地图生命周期;

public class MainActivity extends Activity {  MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } }
usingSystem;usingAndroid.App;usingAndroid.Content;usingAndroid.Runtime;usingAndroid.Views;usingAndroid.Widget;usingAndroid.OS;usingCom.Baidu.Mapapi;usingCom.Baidu.Mapapi.Map;namespaceBaiDuSDKDemoProject
{[Activity(Label= "BaiDuSDKDemoProject", MainLauncher = true, Icon = "@drawable/icon")]public classMainActivity : Activity{int count = 1;MapView mMapView= null;protected override voidOnCreate(Bundle bundle){base.OnCreate(bundle);//Set our view from the "main" layout resource
SDKInitializer.Initialize(ApplicationContext);SetContentView(Resource.Layout.Main);mMapView= FindViewById<MapView>(Resource.Id.bmapView);var s =mMapView.Map;s.MapType=BaiduMap.MapTypeSatellite;}protected override voidOnDestroy(){base.OnDestroy();mMapView.OnDestroy();}protected override voidOnResume(){base.OnResume();mMapView.OnResume();}protected override voidOnPause(){base.OnPause();mMapView.OnPause();}}
}

二十一. 修改程序包名: 你还记得我们在api 控制台那里填写的信息吗?

注意图上的"包名",和我们刚才新建的android项目的名字是不一样,所以我们要手动修改.

项目,右键,属性

修改程序包名称:  BaiDuSDKDemoProject.BaiDuSDKDemoProject----------------->>>>XamarinBaiDuMapSDK.XamarinBaiDuMapSDK

顺便检查一下应用程序图标有没有选上。

二十二。一切ok,开始调试.成功了,效果图在这里 效果图: 北京市的卫星图



剩下的有关百度地图sdk的使用,就需要你自己去看百度地图的文档了,今天我们的教学就到这里了.
百度地图的文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/hellobaidumap


转载于:https://www.cnblogs.com/ThenDog/p/7623720.html

Xamarin.Android Binding-----百度地图SDK相关推荐

  1. Android studio 百度地图SDK之地图定位与运动轨迹绘制

    百度地图定位与运动轨迹 Android开发的前期准备 地图图层显示与定位 运动轨迹的简单绘制 Android开发的前期准备 Android配置在百度地图SDK官网上有详细的说明.具体可以参考官网的教程 ...

  2. Android 调用百度地图sdk 实现路线规划导航

    Android 调用百度地图sdk 实现路线规划导航 功能: 实现实时/需求定位 卫星地图查看 路况 周边poi检索 地点输入提示检索 驾驶 步行 公交 骑行路线规划 注:以上为实现的大概功能 ,接下 ...

  3. android百度地图sdk定位权限,Android:使用百度地图SDK实现定位:下载SDK、申请密钥、动态获得Android权限...

    最近想实现一个打卡的功能,想到可以利用百度地图的SDK.网上有很多关于百度地图SDK定位.地图功能应用的demo,这部分倒不是很困难.但网上很多博客写的内容一般都着重于代码部分,很多下载配置和编译器设 ...

  4. Android去掉百度地图sdk中卫星地图里的白色道路

    最近开发一个APP,需要去掉百度地图sdk中的卫星地图里面的白色道路,没有去掉之前: 如上图各种白色道路割裂了卫星地图进行图层绘制的时候不太美观,于是就百度了如何去掉道路,并且也提交了工单询问百度地图 ...

  5. Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(6) POI检索, 根据地址输入提示检索 Sug

    POI检索, 根据地址输入提示检索 Sug 参考百度地图官方文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/search/sug ...

  6. android 接入百度地图sdk

    项目需求: 接入地图 定位位置 设置百度地图上的各种图标 加载方格的问题 接入地图 1.创建应用 接入的是百度地图,首先去百度地图开放平台上添加应用.在http://lbsyun.baidu.com/ ...

  7. 百度地图 android 自身地点,Android使用百度地图SDK获得当前设备位置所在的省、市(系列1)...

    百度地图开放平台地址:http://developer.baidu.com/map/ 下载Android定位SDK: java代码: package com.example.baidumap; imp ...

  8. Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划

    2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划 开发前配置,显示基本地图,实时定位等查看之前代码,此博客紧接上一博客:https://blog.csdn.ne ...

  9. Android集成百度地图SDK

    本Demo中所含功能 1:定位,显示当前位置 2:地图多覆盖物(地图描点,弹出该点的详细信息) 3:坐标地址互相换算 4:POI兴趣点检索 5:线路查询(步行,驾车,公交) 6:绘制线路(OpenGL ...

  10. android studio百度地图SDK获取当前位置和经纬度和海拔

    网上很多获取位置的博文,但是感觉都不是很全面. 最近刚好有一个项目要求获取当地的经纬度和地理位置 几经折腾,终于还是写出来了.文分享一下. 代码如下 先在AndroidManifest中添加如下权限 ...

最新文章

  1. 在Nature都点赞的大会上,马斯克被「脑机接口之父」炮轰了:他说的话,我一个字都不认同...
  2. idea tomcat启动成功但是访问方面都是404_IDEA相关配置【集成Tomcatamp;项目部署】...
  3. MYSQL 入门全套
  4. 矩形并的面积(51Nod-2488)
  5. [导入]C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式.zip(9.73 MB)...
  6. 广州橙优设计:学习UI需要那些?UI设计必须会的软件
  7. 基于某电信运营数据的精准营销分析
  8. 计算机图形学(第2版 于万波 于硕 编著)第45页的Bresenham算法有错误
  9. 【git】------git的基本命令 (此文章转载我的老师 Alley-巷子)
  10. 杭电ACM 2000-2099 100道题 详细解题报告出炉
  11. 如何让好习惯成为你人生中的一部分
  12. 模拟京东快递单号查询案例2020/11/24
  13. 基于Basys2的分秒计时器的设计
  14. c# 屏幕取词的方法
  15. 领域驱动设计(DDD)实践之路(三):如何设计聚合
  16. Cross-sell and Up-sell
  17. 解决overlaps the location of another project的办法
  18. Java 开发实习生面试题(1)
  19. BPMN - 如何绘制符合良构编排的基础BPMN?
  20. CFA协会委托Prometric协助完成CFA(R) I级课程的数字化转型

热门文章

  1. 组队APP功能点定点NABCD分析
  2. linux日常运维命令
  3. 用.htaccess 禁止IP访问
  4. javascript设置首页,加入收藏
  5. 在C#中调用另一个应用程序或命令行(.exe 带参数)zz
  6. idea code key study form qinChao
  7. 如何通过网页方式将jar包上传到nexus?
  8. 面试官:谈谈分布式一致性机制,我一脸懵逼。。
  9. 一个可能是世界上最全的 API 接口集合库开源项目
  10. 蚂蚁金服OceanBase“击败”甲骨文?呵呵!