在Xamarin android如何调用百度地图呢?

首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词”百度地图api”,的确是泛泛而谈,我们来看一下百度地图的官网:

android上使用百度地图的有Android地图SDK,定位SDK,导航SDK,全景SDK......等等虽然平时项目中可能会用到,但是不一定每一个SDK都能熟练掌握,xamarin android中如何使用百度地图的这些SDK呢,好吧,说这么多废话其实我想写的就是

在Xamarin android如何使用百度地图的定位sdk

首先我来看一下效果:

下面主要流程分为以下几步:
  1. 新建项目 Binging Labrary(android)
  2. 下载百度地图 --Android定位SDK    
  3. Binging Labrary项目添加相关文件
  4. 注册百度开发平台,创建应用,获取AK(要注意这一点)
  5. 创建Android项目引用Binging Labrary项目
  6. 写入百度提供示例代码,成功。

第一步:创建Binding Labrary(Android)

第二步:下载百度地图  Android定位SDK http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download

第三步:在Jars文件夹下添加jar文件,并将jar文件的生成操作改为Embedded.jar如图:

重新生成马上就会报这个错误:

只需要打开项目DWService - Transforms文件夹 修改Transforms-metadata.xml文件为以下,就不会生成错误。

  1. <metadata>
  2.   <attr path="/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']" name="name">Addresses</attr>
  3. </metadata>
  4. 新建文件夹Assets:把下载的以下文件粘贴到Assets文件夹下,并将so文件的生成操作修改为EmbeddedNativeLibrary
  5. 第四步:到了最关键的时候,如果不是很明白这一步的操作,可以百度一下。这一步的目的是获取访问应用(AK)如图:

创建应用后,填写SHA1,那么如何获取SHA1的方法有很多,看了很多博客,但是Xamarin android 获取sha1这种方式 在Dos中输入命令的方式有时候没有作用,之前在我笔记本上的操作居然没有作用,有点郁闷,我这个台式又可以获取 。 输入路径 :C:\Users\zhanglin\AppData\Local\Xamarin\Mono for Android 命令:keytool -list -v -keystore debug.keystore 输入密钥口令:直接回车键,如果不行的输入Android。创建应用的时候包名就是AndroidManifest.xml文件中package属性的值

当然你可以用其他的方式获取sha1,下载MCodeCheck,也可以查看sha1值

第五步:创建一个Android项目并添加引用,引用就是项目-解决方案新建的这个BaiduServer

第六步:在Android项目中的AndroidManifest.xml文件中进行一下配置:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="BaiduDW.BaiduDW" android:versionCode="1" android:versionName="1.0">
  3. <uses-sdk android:minSdkVersion="16" />
  4. <application android:label="BaiduDW">
  5. <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
  6. </service>
  7. <meta-data
  8. android:name="com.baidu.lbsapi.API_KEY"
  9. android:value="CUm5LGTd4Y38YLXXzs3xjfNa0dvV8BOT" /> //key:开发者申请的Key
  10. </application>
  11. <!-- 这个权限用于进行网络定位-->
  12. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
  13. <!-- 这个权限用于访问GPS定位-->
  14. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
  15. <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
  16. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  17. <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
  18. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  19. <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
  20. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  21. <!-- 用于读取手机当前的状态-->
  22. <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
  23. <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
  24. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
  25. <!-- 访问网络,网络定位需要上网-->
  26. <uses-permission android:name="android.permission.INTERNET" />
  27. <!-- SD卡读取权限,用户写入离线定位数据-->
  28. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
  29. </manifest>

在MainActivity.cs中引入Com.Baidu.Location , System.Text,并实现接口IBDLocationListener,例子代码是百度官方的。所实现的效果调试中的输出可以看到。

  1. using System;
  2. using Android.App;
  3. using Android.OS;
  4. using Com.Baidu.Location;
  5. using System.Text;
  6. namespace BaiduMapDemo
  7. {
  8. [Activity(Label = "BaiduMapDemo", MainLauncher = true, Icon = "@drawable/icon")]
  9. public class MainActivity : Activity,IBDLocationListener
  10. {
  11. int count = 1;
  12. public LocationClient mLocationClient = null;
  13. protected override void OnCreate(Bundle bundle)
  14. {
  15. base.OnCreate(bundle);
  16. SetContentView(Resource.Layout.Main);
  17. mLocationClient = new LocationClient(ApplicationContext); //声明LocationClient类
  18. mLocationClient.RegisterLocationListener(this); //注册监听函数
  19. StartLocationService();
  20. }
  21. private void StartLocationService()
  22. {
  23. LocationClientOption option = new LocationClientOption();
  24. option.SetLocationMode(LocationClientOption.LocationMode.HightAccuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
  25. option.CoorType = "bd09ll";//可选,默认gcj02,设置返回的定位结果坐标系
  26. int span = 1000;
  27. option.ScanSpan = span;//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
  28. option.SetIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
  29. option.OpenGps = true;//可选,默认false,设置是否使用gps
  30. option.LocationNotify = true;//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
  31. option.SetIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
  32. option.SetIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
  33. option.SetIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
  34. option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
  35. option.EnableSimulateGps = false;//可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
  36. mLocationClient.LocOption = option;
  37. mLocationClient.Start();
  38. }
  39. public void OnReceiveLocation(BDLocation location)
  40. {
  41. StringBuilder sb = new StringBuilder();
  42. sb.Append("time : ");
  43. sb.Append(location.Time);
  44. sb.Append("\nerror code : ");
  45. sb.Append(location.LocType);
  46. sb.Append("\nlatitude : ");
  47. sb.Append(location.Latitude);
  48. sb.Append("\nlontitude : ");
  49. sb.Append(location.Longitude);
  50. sb.Append("\nradius : ");
  51. sb.Append(location.Radius);
  52. if (location.LocType == BDLocation.TypeGpsLocation)
  53. {// GPS定位结果
  54. sb.Append("\nspeed : ");
  55. sb.Append(location.Speed);// 单位:公里每小时
  56. sb.Append("\nsatellite : ");
  57. sb.Append(location.SatelliteNumber);
  58. sb.Append("\nheight : ");
  59. sb.Append(location.Altitude);// 单位:米
  60. sb.Append("\ndirection : ");
  61. sb.Append(location.Direction);// 单位度
  62. sb.Append("\naddr : ");
  63. sb.Append(location.AddrStr);
  64. sb.Append("\ndescribe : ");
  65. sb.Append("gps定位成功");
  66. }
  67. else if (location.LocType == BDLocation.TypeNetWorkLocation)
  68. {// 网络定位结果
  69. sb.Append("\naddr : ");
  70. sb.Append(location.AddrStr);
  71. //运营商信息
  72. sb.Append("\noperationers : ");
  73. sb.Append(location.Operators);
  74. sb.Append("\ndescribe : ");
  75. sb.Append("网络定位成功");
  76. }
  77. else if (location.LocType == BDLocation.TypeOffLineLocation)
  78. {// 离线定位结果
  79. sb.Append("\ndescribe : ");
  80. sb.Append("离线定位成功,离线定位结果也是有效的");
  81. }
  82. else if (location.LocType == BDLocation.TypeServerError)
  83. {
  84. sb.Append("\ndescribe : ");
  85. sb.Append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
  86. }
  87. else if (location.LocType == BDLocation.TypeNetWorkException)
  88. {
  89. sb.Append("\ndescribe : ");
  90. sb.Append("网络不同导致定位失败,请检查网络是否通畅");
  91. }
  92. else if (location.LocType == BDLocation.TypeCriteriaException)
  93. {
  94. sb.Append("\ndescribe : ");
  95. sb.Append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
  96. }
  97. sb.Append("\nlocationdescribe : ");
  98. sb.Append(location.LocationDescribe);// 位置语义化信息
  99. System.Collections.Generic.IList<Poi> list = location.PoiList;// POI数据
  100. if (list != null)
  101. {
  102. sb.Append("\npoilist size = : ");
  103. sb.Append(list.Count.ToString());
  104. foreach (Poi p in list)
  105. {
  106. sb.Append("\npoi= : ");
  107. sb.Append(p.Id + " " + p.Name + " " + p.Rank);
  108. }
  109. }
  110. System.Diagnostics.Debug.Write(sb.ToString());
  111. }
  112. }
  113. }

关于android中使用gps定位获取位置相关信息:http://blog.csdn.net/kebi007/article/details/74936979

作者:张林

标题:xamarin android如何调用百度地图入门示例(一)原文地址:http://blog.csdn.net/kebi007/article/details/52887570

转载随意注明出处

[置顶] Xamarin android如何调用百度地图入门示例(一)的更多相关文章

  1. [置顶] xamarin android toolbar(踩坑完全入门详解)

    网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...

  2. [置顶] Xamarin android 调用Web Api(ListView使用远程数据)

    xamarin android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

  3. Android中调用百度地图

    一.调用百度地图 --第一种方法 1.下载百度地图SDK SDK可以拆分下载,需要使用那一部分功能就下载相应包含的SDK,如下图 核心的的jar 和so包,放在工程中的libs目录下 2.申请key ...

  4. [置顶] xamarin android使用gps定位获取经纬度

    看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...

  5. Xamarin.Android之使用百度地图起始篇

    一.前言 如今跨平台开发层出不穷,而对于.NET而言时下最流行的当然还是Xamarin,不仅仅能够让我们在熟悉的Vs下利用C#开发,在对原生态类库的支持方面也有着非常的好支持,今天我们将会以百度地图类 ...

  6. [置顶] Xamarin android中使用signalr实现即时通讯

    前面几天也写了一些signalr的例子,不过都是在Web端,今天我就来实践一下如何在xamarin android中使用signalr,刚好工作中也用到了这个,也算是总结一下学到的东西吧,希望能帮助你 ...

  7. [置顶] xamarin android自定义标题栏(自定义属性、回调事件)

    自定义控件的基本要求 这篇文章就当是自定义控件入门,看了几篇android关于自定义控件的文章,了解了一下,android自定义控件主要有3种方式: 自绘控件:继承View类,所展示的内容在OnDra ...

  8. [置顶] xamarin android自定义spinner

    以前弄的一个下拉框时自带的spinner,感觉好丑,实际效果实在满足不了基本的UI界面要求,还是自己动手丰衣足食,看了网上关于android中自定义spinner的文章,感觉实现原理还是比较简单,所以 ...

  9. [置顶] Xamarin Android安装教程(2016最新亲测安装版)

    写这篇安装教程前要说的几句话 之前很多人想用Vs来开发Android项目,苦于这个环境的安装.的确这并不是一件简单的事情,并不是开发者都能在花一上午能装好,如果你花了一天时间,第一个Xamarin   ...

随机推荐

  1. asp.net core 实现一个简单的仓储

    一直有自己写个框架的想法,但是一直没有行动起来,最近比较闲,正好可以开工了. 现在已经完成了两部分.1.一个简单仓储,实现使用的是ef 2.IOC部分,这里是把内置的ioc替换成了aotofac,这部 ...

  2. VMware虚拟机安装教程

    在实际的开发过程中,使用到VMware的时候是很多的.当你的电脑安装的是windows系统而想使用linux系统时,为了避免对本机的系统进行操作,那么安装虚拟机就是一项不错的选择. 在写这篇博文时,刚 ...

  3. websocket(三) 进阶!netty框架实现websocket达到高并发

    引言: 在前面两篇文章中,我们对原生websocket进行了了解,且用demo来简单的讲解了其用法.但是在实际项目中,那样的用法是不可取的,理由是tomcat对高并发的支持不怎么好,特别是tomcat ...

  4. ##1.Centos7环境准备-- openstack pike

    ##1.Centos7环境准备 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##.Centos7环境准备 #Ce ...

  5. 一个三维点类Gpoint3的实现

    1 类设计 基本功能 (1)默认构造时,自动初始化为(0,0,0): (2)支持点之间的加.减运算: (3)支持点与常量数据的加.减.乘除运算: (4)支持点之间的相等或不能判断 (5)如果把点类看作 ...

  6. eclipse中将本地项目上传到svn库

    转载文章:http://blog.csdn.net/singit/article/details/48972197

  7. HTTP协议之URL

    1.什么是URL URL的全称是Uniform Resoure Locator,统一资源定位器.URL是浏览器寻找信息时所需的资源位置.当一个人将浏览器指向一个URL,浏览器就会在幕后发送适当的协议报 ...

  8. Java SE 8 流库(二)

    1.3. filter,map,flatMAP方法 流的转换会产生一个新流,它的元素派生出自另一个流中的元素: Stream<T> filter(Predicate<? super ...

  9. 运行循环 - RunLoop

    1.RunLoop简介 1.1 什么是RunLoop 简单来说就是:运行循环,可以理解成一个死循环,一直在运行. RunLoop实际上就是一个对象,这个对象用来处理程序运行过程中出现的各种事件(触摸. ...

  10. 自学OpenCV时遇到的一些错误(捂脸ing,当年确实好多不懂...)

    6.8/14 opencv环境配置好了, 属性也设置对了, 但是使用VideoCapture类的时候, 还是出错.  右键可以查看其定义, 但是就是 出错.   漏掉了#include "s ...