搜尋
首頁php教程php手册【Android】第3章(1)百度地图及其应用--预备知识

分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04 一、概述 这一章先来点有意思的百度地图应用示例,然后再分章详细介绍用C#开发Android App的各种基本技术。 本章以百度官网2016年1月发布的地图API(3.7.1版)为例,演示如何用C#和VS2015编

分类: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”,单击该网页中的【相关下载】,就会出现下面的界面:

image

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

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

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

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

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

image

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

好了,以后也不需要忍受没有硬件加速的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="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.mapapi']/class[@name='VersionInfo']/field[@name='VERSION_INFO']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">managedName</span><span style="color: #800000;">"</span>>VersionInfoString</attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.platform.comapi.map']/class[@name='A']/field[@name='a']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">managedName</span><span style="color: #800000;">"</span>>aVar</attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.platform.comapi.map']/class[@name='B']/field[@name='b']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">managedName</span><span style="color: #800000;">"</span>>bVar</attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">managedName</span><span style="color: #800000;">"</span>>AddressString</attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.mapapi.cloud']/class[@name='VersionInfo']/field[@name='VERSION_INFO']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">managedName</span><span style="color: #800000;">"</span>>VersionInfoString</attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.mapapi.radar']/class[@name='VersionInfo']/field[@name='VERSION_INFO']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">managedName</span><span style="color: #800000;">"</span>>VersionInfoString</attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.mapapi.search.core']/class[@name='g']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">obfuscated</span><span style="color: #800000;">"</span>><span style="color: #0000ff;">false</span></attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.mapapi.search.district']/class[@name='DistrictSearch']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">managedName</span><span style="color: #800000;">"</span>>DistrictSearchs</attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.pano.platform.comapi.a']/class[@name='a']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">obfuscated</span><span style="color: #800000;">"</span>><span style="color: #0000ff;">false</span></attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.location']/class[@name='LocationClientOption']/field[@name='mLocationMode']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">visibility</span><span style="color: #800000;">"</span>><span style="color: #0000ff;">public</span></attr>
  <attr path="<span" style="color: #800000;">"<span style="color: #800000;">/api/package[@name='com.baidu.mapapi.a.a']/class[@name='a']</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">obfuscated</span><span style="color: #800000;">"</span>><span style="color: #0000ff;">false</span></attr>
</metadata>

4、添加BaiduMapOptions.cs文件

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

<span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Com.Baidu.Mapapi.Map
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> BaiduMapOptions
    {
        </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> BaiduMapOptions() { }
    }
}</span>

该文件的用途是提供一个不带参数的构造函数,如果不添加该文件,无法直接在后续节的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=<span style="color: #800000;">"<span style="color: #800000;">1.0</span><span style="color: #800000;">"</span> encoding=<span style="color: #800000;">"</span><span style="color: #800000;">utf-8</span><span style="color: #800000;">"</span>?>
<manifest xmlns:android="<span" style="color: #800000;">"<span style="color: #800000;">http://schemas.android.com/apk/res/android</span><span style="color: #800000;">"</span> package=<span style="color: #800000;">"</span><span style="color: #800000;">BdMapV371Demos.BdMapV371Demos</span><span style="color: #800000;">"</span> android:versionCode=<span style="color: #800000;">"</span><span style="color: #800000;">1</span><span style="color: #800000;">"</span> android:versionName=<span style="color: #800000;">"</span><span style="color: #800000;">1.0</span><span style="color: #800000;">"</span> android:installLocation=<span style="color: #800000;">"</span><span style="color: #800000;">auto</span><span style="color: #800000;">"</span>>
    <uses-sdk></uses-sdk>
    <application android:label="<span" style="color: #800000;">"<span style="color: #800000;">BdMapV371Demos</span><span style="color: #800000;">"</span> android:theme=<span style="color: #800000;">"</span><span style="color: #800000;">@style/MyCustomTheme</span><span style="color: #800000;">"</span>>
        <meta-data android:name="<span" style="color: #800000;">"<span style="color: #800000;">com.baidu.lbsapi.API_KEY</span><span style="color: #800000;">"</span> android:value=<span style="color: #800000;">"你申请的密钥</span><span style="color: #800000;">"</span> />
        <service android:name="<span" style="color: #800000;">"<span style="color: #800000;">com.baidu.location.f</span><span style="color: #800000;">"</span> android:enabled=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> android:PRocess=<span style="color: #800000;">"</span><span style="color: #800000;">:remote</span><span style="color: #800000;">"</span> />
    </service></meta-data></application>
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.WAKE_LOCK</span><span style="color: #800000;">"</span> />
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">com.android.launcher.permission.READ_SETTINGS</span><span style="color: #800000;">"</span> />
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.WRITE_SETTINGS</span><span style="color: #800000;">"</span> />
    <!-- 访问网络,网络定位需要上网-->
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.INTERNET</span><span style="color: #800000;">"</span> />
    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.access_COARSE_LOCATION</span><span style="color: #800000;">"</span> />
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.ACCESS_WIFI_STATE</span><span style="color: #800000;">"</span> />
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.ACCESS_NETWORK_STATE</span><span style="color: #800000;">"</span> />
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.CHANGE_WIFI_STATE</span><span style="color: #800000;">"</span> />
    <!-- 用于读取手机当前的状态-->
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.READ_PHONE_STATE</span><span style="color: #800000;">"</span> />
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.WRITE_EXTERNAL_STORAGE</span><span style="color: #800000;">"</span> />
    <!-- SD卡读取权限,用户写入离线定位数据-->
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.MOUNT_UNMOUNT_FILESYSTEMS</span><span style="color: #800000;">"</span> />
    <!--允许应用读取低级别的系统日志文件 -->
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.READ_LOGS</span><span style="color: #800000;">"</span> />
    <uses-permission android:name="<span" style="color: #800000;">"<span style="color: #800000;">android.permission.ACCESS_SURFACE_FLINGER</span><span style="color: #800000;">"</span> />
    <!--
  <uses-permission android:name=<span style="color: #800000;">"</span><span style="color: #800000;">android.permission.ACCESS_FINE_LOCATION</span><span style="color: #800000;">"</span> />
    <uses-permission android:name=<span style="color: #800000;">"</span><span style="color: #800000;">android.permission.LOCATION_HARDWARE</span><span style="color: #800000;">"</span> />
    <uses-permission android:name=<span style="color: #800000;">"</span><span style="color: #800000;">android.permission.SET_ANIMATION_SCALE</span><span style="color: #800000;">"</span> />
  -->
    <supports-screens android:anydensity="<span" style="color: #800000;">"<span style="color: #800000;">true</span><span style="color: #800000;">"</span> android:largeScreens=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> android:normalScreens=<span style="color: #800000;">"</span><span style="color: #800000;">false</span><span style="color: #800000;">"</span> android:resizeable=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> android:smallScreens=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> />
</supports-screens></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></manifest>

2、运行项目得到SHA1

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

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

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

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

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

实际上,你稍微观察一下输出窗口,就会发现当你按键调试运行后,系统首先自动执行的就是下面介绍的这些命令。或者说,这些步骤是系统自动完成的,不需要你去做。这里之所以解释一下这些命令的含义,目的只是为了帮你理解它是如何得到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)创建本章示例项目

 


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具