在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文件为以下,就不会生成错误。

<metadata>
<attr path="/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']" name="name">Addresses</attr>
</metadata>
新建文件夹Assets:把下载的以下文件粘贴到Assets文件夹下,并将so文件的生成操作修改为EmbeddedNativeLibrary

第四步:到了最关键的时候,如果不是很明白这一步的操作,可以百度一下。这一步的目的是获取访问应用(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文件中进行一下配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="BaiduDW.BaiduDW" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="16" />
<application android:label="BaiduDW">
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="CUm5LGTd4Y38YLXXzs3xjfNa0dvV8BOT" /> //key:开发者申请的Key
</application>
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取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.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
</manifest>

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

using System;
using Android.App;
using Android.OS;
using Com.Baidu.Location;
using System.Text;
namespace BaiduMapDemo
{
[Activity(Label = "BaiduMapDemo", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity,IBDLocationListener
{
int count = 1;
public LocationClient mLocationClient = null;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
mLocationClient = new LocationClient(ApplicationContext); //声明LocationClient类
mLocationClient.RegisterLocationListener(this); //注册监听函数
StartLocationService();
}
private void StartLocationService()
{
LocationClientOption option = new LocationClientOption();
option.SetLocationMode(LocationClientOption.LocationMode.HightAccuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.CoorType = "bd09ll";//可选,默认gcj02,设置返回的定位结果坐标系
int span = 1000;
option.ScanSpan = span;//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.SetIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.OpenGps = true;//可选,默认false,设置是否使用gps
option.LocationNotify = true;//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
option.SetIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.SetIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.SetIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.EnableSimulateGps = false;//可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
mLocationClient.LocOption = option;
mLocationClient.Start();
}
public void OnReceiveLocation(BDLocation location)
{
StringBuilder sb = new StringBuilder();
sb.Append("time : ");
sb.Append(location.Time);
sb.Append("\nerror code : ");
sb.Append(location.LocType);
sb.Append("\nlatitude : ");
sb.Append(location.Latitude);
sb.Append("\nlontitude : ");
sb.Append(location.Longitude);
sb.Append("\nradius : ");
sb.Append(location.Radius);
if (location.LocType == BDLocation.TypeGpsLocation)
{// GPS定位结果
sb.Append("\nspeed : ");
sb.Append(location.Speed);// 单位:公里每小时
sb.Append("\nsatellite : ");
sb.Append(location.SatelliteNumber);
sb.Append("\nheight : ");
sb.Append(location.Altitude);// 单位:米
sb.Append("\ndirection : ");
sb.Append(location.Direction);// 单位度
sb.Append("\naddr : ");
sb.Append(location.AddrStr);
sb.Append("\ndescribe : ");
sb.Append("gps定位成功");
}
else if (location.LocType == BDLocation.TypeNetWorkLocation)
{// 网络定位结果
sb.Append("\naddr : ");
sb.Append(location.AddrStr);
//运营商信息
sb.Append("\noperationers : ");
sb.Append(location.Operators);
sb.Append("\ndescribe : ");
sb.Append("网络定位成功");
}
else if (location.LocType == BDLocation.TypeOffLineLocation)
{// 离线定位结果
sb.Append("\ndescribe : ");
sb.Append("离线定位成功,离线定位结果也是有效的");
}
else if (location.LocType == BDLocation.TypeServerError)
{
sb.Append("\ndescribe : ");
sb.Append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
}
else if (location.LocType == BDLocation.TypeNetWorkException)
{
sb.Append("\ndescribe : ");
sb.Append("网络不同导致定位失败,请检查网络是否通畅");
}
else if (location.LocType == BDLocation.TypeCriteriaException)
{
sb.Append("\ndescribe : ");
sb.Append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
}
sb.Append("\nlocationdescribe : ");
sb.Append(location.LocationDescribe);// 位置语义化信息
System.Collections.Generic.IList<Poi> list = location.PoiList;// POI数据
if (list != null)
{
sb.Append("\npoilist size = : ");
sb.Append(list.Count.ToString());
foreach (Poi p in list)
{
sb.Append("\npoi= : ");
sb.Append(p.Id + " " + p.Name + " " + p.Rank);
}
}
System.Diagnostics.Debug.Write(sb.ToString());
}
}
}

关于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. Eclipse创建一个JAVA WEB项目

    继上一篇博客,Eclipse的Tomcat已经配置好了,现在我们开始创建web项目. 1.打开Eclipse,选择菜单栏的file>New>Dynamic Web Project 弹出窗口 ...

  2. node入门笔记

    看了<node入门>http://www.nodebeginner.org/index-zh-cn.html.有些疑难点记下来. 在导出模块的时候给出的代码是这样的 var http = ...

  3. Python入门 - 生成随机数

    生成随机数是编程中经常用到的功能,下面讲几种常用的随机函数randint,uniform,  randrange: 一.生成随机整数 randint import random a = random. ...

  4. SQL Count(*)函数,GROUP_By,Having的联合使用

    COUNT(*)  函数返回在给定的选择中被选的行数. 语法:SELECT  COUNT(*) FROM  table 使用:现在有一个表,名叫app_category,从Navicat中可以看到表中 ...

  5. C#在自定义事件里传递自定义数据,使用EventArgs的姿势

    EventArgs是包含事件数据的类的基类,用于传递事件的细节.今天分享的是使用泛型来约束EventArgs,在事件里传递自定义数据的例子. 正题 由于这个关注点很小,直接上代码了. 定义泛型类TEv ...

  6. .NET作品集:linux下的博客程序

    博客程序架构 本博客程序是博主11年的时候参考loachs小泥鳅博客内核开发的.net跨平台博客cms,距今已有6年多了,个人博客网站一直在用,虽然没有wordpress那么强大,但是当时在深究.ne ...

  7. yii2.0框架debug模式

  8. pipelineDB里Combine用法

    combine only works on aggregate columns that belong to continuous views. 创建CONTINUOUS CREATE CONTINU ...

  9. vs 2015工具栏添加Tab Order

    1. 在工具栏右键,弹出菜单,选中“Customize”菜单项. 2. 选中Commands标签页,选择Toolbar,选择自己要加入的Tab order的类别,之后点击“Add Command”按钮 ...

  10. java-8u151-64安装与配置环境变量

    去oracle官网下载 java jdk for developments(最新发布的java9与java8有很大差别,选择8就够用了) 我是装在默认的C盘里的,直接配置环境变量了 新建JAVA_HO ...