Android百度地图应用开发基础知识

一、概述
 这一章先来点有意思的百度地图应用示例,然后再分章详细介绍用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文件夹下添加该文件,然后将其改为下面的内容:

namespace Com.Baidu.Mapapi.Map
{
  public partial class BaiduMapOptions
  {
    public BaiduMapOptions() { }
  }
}

该文件的用途是提供一个不带参数的构造函数,如果不添加该文件,无法直接在后续节的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值就行了。 
接下来就可以逐步调试本章后面介绍的示例了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android下如何使用百度地图sdk

    可以使用该套 SDK开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,您可以轻松访问百度地图服务和数据,构建功能丰富.交互性强的LBS(地图类)应用程序. 百度地图Android SDK提供的所有服务是免费的,接口使用无次数限制.您需申请密钥(key)后,才可使用百度地图Android SDK.任何非营利性产品请直接使用.这弦外之音就是盈利的产品必须帮百度给钱. 一.百度地图api平台. 百度地图API网址:http://developer.baidu.com/map/sd

  • Android百度地图应用之图层展示

    一.简介  1.地图类型  百度地图Android SDK 3.7.1提供了两种类型的地图资源(普通矢量地图和卫星图),开发者可以利用BaiduMap中的MapType属性(C#)来设置地图类型.C#核心代码如下: mMapView = FindViewById<TextureMapView>(Resource.Id.bmapView); mBaiduMap = mMapView.Map; //设置底图显示模式:普通地图 mBaiduMap.MapType = BaiduMap.MapType

  • Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡

    一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二.编写MyApplication类 public class MyApplication extends Application { private static MyApplication mInstance = null; public boolean m_bKeyRight = true; pu

  • 基于Android实现百度地图定位过程详解

    一.问题描述 LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位.地图.导航等,首先我们看如何基于百度地图实现定位功能 二.配置环境 1.注册密钥:地址http://developer.baidu.com/map/ 2.下载定位SDK,并导入SDK如图所示: 三.编写MyApplication类 编写MyApplication类,为了使用方便我们可以将实现定位的方法封装的Application组件中 封装下列方法 1.  获取定位信息--

  • Android百度地图定位后获取周边位置的实现代码

    本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&q

  • Android百度定位导航之基于百度地图移动获取位置和自动定位

    一.问题描述 使用百度地图实现如图所示应用,首先自动定位当前我起始位置(小圆点位置),并跟随移动不断自动定位我的当前位置 百度Api不同版本使用会有些差异,本例中加入lib如下: 二.编写MyApplication类 public class MyApplication extends Application { static MyApplication myApplication; BMapManager mBMapManager = null; String mStrKey = "7ZfuR

  • Android百度地图应用之基本地图功能实现

    一.简介  1.地图  地图展示:普通地图(2D,3D).卫星图和实时交通图.  地图操作:可通过接口或手势控制来实现地图的点击.双击.长按.缩放.平移.旋转.改变视角等操作.  2.地图类型 百度地图Android SDK 3.6.1提供了两种类型的地图资源(普通矢量地图和卫星图,设置办法见demo04),如果不指定地图类型,默认为普通矢量地图.  此示例仅演示普通矢量图的基本用法.  3.本示例功能描述 该例子介绍如何构建一个基础的地图页面,并演示如何显示以自定义的经纬度坐标为中心点的百度地

  • android实现百度地图自定义弹出窗口功能

    我们使用百度地图的时候,点击地图上的Marker,会弹出一个该地点详细信息的窗口,如下左图所示,有时候,我们希望自己定义这个弹出窗口的内容,或者,干脆用自己的数据来构造这样的弹出窗口,但是,在百度地图最新的Android SDK中,没有方便操作这种弹出窗口的类,虽然有一个PopupOverlay,但是它只支持将弹出内容转化为不多于三个Bitmap,如果这个弹出窗口里想有按钮来响应点击事件,用这个就不能满足要求了,于是,看了一遍百度地图覆盖物的API,我决定用自定义View的方法来实现类似的效果,

  • Android百度地图应用之创建显示地图

    本文是在完成了Android百度地图应用开发基础知识的基础上继续实现的. 本文实例为大家分享了Android如何显示地图,并为后续内容做准备,供大家参考,具体内容如下  1.运行效果  本章共有25个示例,在x86模拟器中运行的效果如下: 下面介绍主要设计步骤.  2.添加资源  (1)drawable-hdpi  Resources/ drawable-hdpi下的文件:将下载的示例对应文件夹下的文件全部拖放到该文件夹下,并将所有[生成操作]属性全部设置为"AndroidResource&qu

  • Android百度地图应用之MapFragment的使用

    一.简介  TextureMapFragment:用于显示地图片段.  二.示例3--Demo03MapFragment.cs  文件名:Demo02MapFragment.cs  简介:介绍在Fragment框架下使用地图  详述:介绍如何在Fragment框架下添加一个TextureMapFragment控件:  1.运行截图  在x86模拟器中运行的效果如下: 2.设计步骤  在上一节例子的基础上,只需要再增加下面的步骤即可.  (1)修改布局文件 将demo02_fragment.xml

随机推荐