分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04

一、概述

这一章先来点有意思的百度地图应用示例,然后再分章详细介绍用C#开发Android App的各种基本技术。

本章以百度官网2016年1月发布的地图API(3.7.1版)为例,演示如何用C#和VS2015编写百度地图应用程序,这些示例程序既可以在Android 6.0的x86模拟器中运行,也可以发布到Android 4.0以上版本的手机中测试实际运行的效果。

1、下载官网提供的Demos

首先访问下面的网址:

http://developer.baidu.com/map/

打开网页后,选择【开发】à【Andoid开发】下的第1项“Android地图SDK”,单击该网页中的【相关下载】,就会出现下面的界面:

单击【自定义下载】,在弹出的界面中,除了导航功能外,其他全部选中,然后将其下载到本机中,并解压到某个文件夹下,以便后续的步骤使用它。

2、使用Gaxaxy_Api23_x86模拟器观察运行结果

为了解决MapView使用硬件加速时存在的问题,百度提供了一个TextureMapView控件,使用此控件呈现地图时,要求修改模拟器的开发者选项。

要使用TextureMapView显示百度地图,需要满足下面的条件:

  • 将所有官方示例中的MapView全部改为用TextureMapView控件来呈现。
  • 修改模拟器的开发者选项,将其设置为允许模拟器“强制进行GPU渲染”(如下图所示)。

这两个条件都满足后,百度地图才能顺利显示出来。

好了,以后也不需要忍受没有硬件加速的ARM模拟器那个特别的“慢”了,后面的例子将继续用带硬件加速的x86模拟器来演示。

当然也可以直接用手机调试运行(这是建议的调试办法,手机连上电脑后可直接在debug右侧的下拉框中看到该手机的选项,用这种办法调试地图应用程序也更符合实际。但是,由于手机调试截图麻烦,所以这里还是直接用模拟器来演示了。

二、创建BdMapV371BindingLib解决方案

解决方案和项目名:BdmapV371BindingLib

模板:Bindings Library(Android)

创建绑定库的目的是将百度地图SDK 3.7.1版本的所有.jar文件自动转换为.cs文件并生成对应的.dll文件,转换以后,就可以在应用项目中引用生成的.dll文件了。

这也是转换.jar文件为.cs文件最常用的办法。

1、添加JAR文件

将以下文件复制到项目的jars文件夹下,并将这些文件的【生成操作】属性全部改为“EmbeddedJar”。

BaiduLBS_Android.jar

IndoorscapeAlbumPlugin.jar

2、添加最新稳定版Xamarin.Android.Support.v4的引用

鼠标右击【引用】à【管理NuGet程序包】,添加最新稳定版Xamarin.Android.Support.v4的引用,本人添加的是Xamarin.Android.Support.v4.23.1.1.0。

3、修改Metadata.xml文件

打开Transforms文件夹下的Metadata.xml文件,将其改为下面的内容:

<metadata><attr path="/api/package[@name='com.baidu.mapapi']/class[@name='VersionInfo']/field[@name='VERSION_INFO']" name="managedName">VersionInfoString</attr><attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='A']/field[@name='a']" name="managedName">aVar</attr><attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='B']/field[@name='b']" name="managedName">bVar</attr><attr path="/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']" name="managedName">AddressString</attr><attr path="/api/package[@name='com.baidu.mapapi.cloud']/class[@name='VersionInfo']/field[@name='VERSION_INFO']" name="managedName">VersionInfoString</attr><attr path="/api/package[@name='com.baidu.mapapi.radar']/class[@name='VersionInfo']/field[@name='VERSION_INFO']" name="managedName">VersionInfoString</attr><attr path="/api/package[@name='com.baidu.mapapi.search.core']/class[@name='g']" name="obfuscated">false</attr><attr path="/api/package[@name='com.baidu.mapapi.search.district']/class[@name='DistrictSearch']" name="managedName">DistrictSearchs</attr><attr path="/api/package[@name='com.baidu.pano.platform.comapi.a']/class[@name='a']" name="obfuscated">false</attr><attr path="/api/package[@name='com.baidu.location']/class[@name='LocationClientOption']/field[@name='mLocationMode']" name="visibility">public</attr><attr path="/api/package[@name='com.baidu.mapapi.a.a']/class[@name='a']" name="obfuscated">false</attr>
</metadata>

4、添加BaiduMapOptions.cs文件

在Additions文件夹下添加该文件,然后将其改为下面的内容:

namespaceCom.Baidu.Mapapi.Map
{public partial classBaiduMapOptions{publicBaiduMapOptions() { }}
}

该文件的用途是提供一个不带参数的构造函数,如果不添加该文件,无法直接在后续节的Demos项目中创建BaiduMapOptions的实例(这一节用不到它)。

5、生成dll文件

鼠标右击该项目名,选择【生成】,此时应该在【输出】窗口中看到编译成功了:

========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

这样一来,在bin\debug文件夹下就成功生成了BdMapV371BindingLib.dll,以后就可以在示例项目中引用这个.dll文件了。

三、创建BdMapV371Demos解决方案并获取开发密钥

解决方案和项目名:BdmapV371Demos

模板:Blank App(Android)

开发百度地图应用程序时,需要先在百度官网上申请一个开发密钥,百度的开发密钥由“SHA1+包名”组合组成,这是为了让一个项目唯一对应一个申请的密钥(key)。密钥申请成功后,才能在对应的项目中使用百度地图API。

1、修改AndroidManifest.xml文件

修改BdMapV371Demos项目的该文件,将其改为下面的内容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="BdMapV371Demos.BdMapV371Demos" android:versionCode="1" android:versionName="1.0" android:installLocation="auto"><uses-sdk /><application android:label="BdMapV371Demos" android:theme="@style/MyCustomTheme"><meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="你申请的密钥" /><service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" /></application><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><!-- 访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET" /><!-- 这个权限用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!-- 获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><!-- 用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- SD卡读取权限,用户写入离线定位数据--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!--允许应用读取低级别的系统日志文件 --><uses-permission android:name="android.permission.READ_LOGS" /><uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /><!--<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.LOCATION_HARDWARE" /><uses-permission android:name="android.permission.SET_ANIMATION_SCALE" />--><supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="false" android:resizeable="true" android:smallScreens="true" />
</manifest>

2、运行项目得到SHA1

按<F5>键运行项目,在输出窗口中找到下面这一行:

D/auth info( 3210): mcode: 【……】;BdMap361Test.BdMap361Test

其中,分号前的【……】就是SHA1,复制它,以备下一步申请密钥用。

说明:创建另一个解决方案和项目时,只要你的开发环境不变,调试模式的SHA1还是这个值(这个值与是哪个项目无关,而是与debug.keystore文件有关),所以最好把这个SHA1保存在单独的文档中,以便以后用它申请多个开发密钥。

当然,由于这一步还没有完成密钥申请的第2步,现在还看不到地图。

实际上,你稍微观察一下输出窗口,就会发现当你按<F5>键调试运行后,系统首先自动执行的就是下面介绍的这些命令。或者说,这些步骤是系统自动完成的,不需要你去做。这里之所以解释一下这些命令的含义,目的只是为了帮你理解它是如何得到SHA1并自动显示出来让你去使用的):

对于Windows操作系统来说,默认情况下,可以在以下位置找到Xamarin.Android调试版本的用于应用程序签名的密钥库:

C:\Users\[USERNAME]\AppData\Local\Xamarin\Mono for Android\debug.keystore

通过JDK提供的keytool命令,可得到密钥存储库的信息。对于Windows系统来说,keytool的位置为:C:\Program Files (x86)\Java\jdk1.7.0_79\bin keytool.exe。

在VS2015中的使用办法为(不需要你去配置环境变量):依次单击【工具】à【Android】à【Android Adb Command Prompt】,这样就进入了命令行模式。

在命令行模式下,可使用下面的命令形式运行keytool工具:

keytool -list -v -keystore [STORE FILENAME] -alias [KEY NAME] -storepass [STORE PASSWORD] -keypass [KEY PASSWORD]

键入的具体命令为(注意[USERNAME]应该替换为实际的名字):

C:\

cd\users\[USERNAME]\appdata\local\Xamarin\Mono for Android

keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android

此时你在控制台窗口中将会看到下面的内容:

别名: androiddebugkey

序列号:……(此处省略了具体值)

有效期开始日期: ……(此处省略了具体值)

截止日期: ……(此处省略了具体值)

证书指纹:

MD5: ……(此处省略了具体值)

SHA1: ……(此处省略了具体值)

SHA256:……(此处省略了具体值)

签名算法名称: SHA256withRSA

版本: 3

扩展

……

3、进入官网获取开发密钥

进入百度的官网(http://developer.baidu.com/map/),选择【开发】à【Andoid开发】下的第1项“Android地图SDK”,然后单击该网页中的【申请密钥(key)】,选择【进入新的key申请系统】,输入下面的信息:

应用名称:BdMapV371Demos

应用类型:Android SDK

数字签名(SHA1):

包名:BdMapV371Demos.BdMapV371Demos

对于C#项目来说,这里输入的包名实际上是“解决方案名.项目名”,并没有全部是小写字母的要求。

将上一步复制的SHA1粘贴到“数字签名(SHA1)”右侧的文本框中。

单击【提交】按钮,完成密钥申请。

4、将申请的密钥填入到配置文件中

修改AndroidManifest.xml文件,在Application中填入你刚申请的密钥。

以后再为新项目申请新的密钥时,只要开发环境不变,这个SHA1值就不会变化。以后再申请新的密钥时,直接填入这个SHA1值就行了。

接下来就可以逐步调试本章后面介绍的示例了。

【上一篇】第2章(2)PhonewordApp--第1个Andoid应用程序   【下一篇】第3章(2)创建本章示例项目

【Android】3.0 第3章 百度地图及其应用--预备知识相关推荐

  1. android 定位 闪退_Android使用百度地图出现闪退及定位时显示蓝屏问题

    1.Android使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.xml文件中未在application标签中配置 但是,有些同学会发现,所有配置都是按照官网或者教程上的步 ...

  2. Android 起调第三方导航,百度地图,高德地图,腾讯地图。起调高德地图导航

    主要工具类 /*** Created by meixi on 2018/6/29.* 使用第三方导航:高德.百度..........*/ public class AmapUtil {public s ...

  3. Android Google Map开发指南(三)百度地图、谷歌地图自如切换

    如果你是刚开始接触谷歌地图的话,推荐你先看一下文章: Android Google Map 开发指南(一)解决官方demo显示空白只展示google logo问题 Android Google Map ...

  4. android 记录路线轨迹_基于百度地图SDK记录运动轨迹

    标签 : 运动轨迹 百度地图SDK 最终实现的效果如下图所示### 注意1:模拟器上模拟要设置好Location(如果选择None就无法定位了),同时第一次打开应用会提示授权使用地理位置信息,点击允许 ...

  5. android 高德卫星地图数据,白马地图 Bmap for Android v7.3.81 强大高德百度地图应用|张小北...

    Bmap for Android 是一款集成高德地图百度地图为一体的第三方地图应用APP,Bmap for Android 又叫白马地图,采用高德/百度地图数据引擎,可任意切换百度地图.高德地图数据源 ...

  6. 百度手机输入法android v4.0,挥毫方寸间 百度手机输入法Android v4.0“水墨”登场...

    今日,百度手机输入法Android V4.0正式版"水墨"登场.百度手机输入法Android v4.0,手写速度大幅提升,搭配手写笔锋效果,边写边出字,尽情享受全新的手写体验.还能 ...

  7. Android --- 解决 registerLocationListener 过时问题(百度地图)API

    第一行代码中使用百度地图,registerLocationListener 过时,问题原因与修改方法如下 修改方法:将原代码中public class MyLocationListener imple ...

  8. android 获取定位坐标,在百度地图出现大偏移的处理办法

    问题现象: 通过android原生api获取到gps坐标,调用百度的地图api在手机上显示时,发现偏移距离超过1KM. android获取定位坐标的代码,网上很多不再粘贴. 问题分析: android ...

  9. android运动轨迹rungps_android运动轨迹rungps_Android使用百度地图API实现GPS步行轨迹...

    下面是效果: 采样点取得太频繁所以看起来像是一个个点...   可以自己设计算法只取有用的点. 为了方便,我直接修改百度提供的示例代码. 要修改的是BMapApiDemoApp.java,Locati ...

最新文章

  1. 通过串口关闭Linux服务器
  2. 猛男把400+条猫咪叫声做成数据集,可识别猫咪的3种不同状态丨开源
  3. 捉虫记 C++转java Java中equals和==的区别
  4. 合成小丹(dp+二进制按位或+结论)
  5. Net-DataGridView
  6. SAP License:未分配差异新解
  7. 微软一站式示例代码库(中文版)2011-05-13版本, 新添加Windows Azure, WinForms等16个Sample...
  8. C++基础知识:C++语言中的表达式求值
  9. 计算机病毒与恶意代码期末总结
  10. 大数据技术原理与应用 第三版 林子雨 期末复习(一)大数据概述 第一章 P2
  11. Protel DXP 2004 SP3_SP4 注册机
  12. 安装了谷歌服务框架还是闪退_GO谷歌安装器小米专版
  13. python爬取app数据_如何进行手机APP的数据爬取?
  14. unlink函数 与 remove函数
  15. Web服务器性能测试介绍
  16. STM32F103C8T6移植uC/OS-III基于HAL库
  17. 关于HTML中a标签的重大安全性漏洞!!!
  18. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
  19. MagicLicense破解记录
  20. abbplc型号_ABB AC500系列PLC

热门文章

  1. 欧拉定理和C语言实现 - win32版
  2. 超图iServer重置管理员密码图解
  3. C++单元测试学习总结9
  4. sourceTree
  5. ajax 传递数组参数
  6. css样式之 direction
  7. javascript笔记——cookie解析
  8. 生成 PDF 全攻略【1】初体验
  9. zoj 1962 How Many Fibs?(字符串化为数字处理)
  10. 传华西村将斥资亿元涉足网游业