GoogleMap开发小白入门篇

时间:2022-11-26 14:49:44

这篇文章是我一边学习google map一边整理的思绪,文章有的地方是从google map最新api直接copy的,也为不能*的朋友带点福利。

 

1.   开发前的准备,我的开发工具是AS1.5.1正式版,开发google map应用首先得确保sdk下载了google api和google play service以及google repository(好多帖子主要是让安装google play service,不过google api和google repository也下载也没啥大碍。)

以下是google官方文档的截图,这下知道该下载哪个sdk了吧

GoogleMap开发小白入门篇

2.   在AS导入google playservice,可以使用dependecies设置依赖,也可以设置添加extras/google里的google-play-service.jar的jar包,我这里使用的是前者,格式如下

compile 'com.google.android.gms:play-services:8.4.0'

 

3.      大多数涉及第三方服务的都会有第三方开发平台,有平台就需要注册开发者账号,google也不例外,需要你去注册,并将你的项目的SHA1码提交上去,生成APIKey,SHA1码通过工程的签名证书获得,一台设备一般对应一debug.keystore,

怎么用命令行读取这里就不提及了,

4.   这里我使用vpn登录code.google.com注册了google账号,

然后进入https://code.google.com/apis/console创建工程

GoogleMap开发小白入门篇

GoogleMap开发小白入门篇

申请完成后大概这样子。

 GoogleMap开发小白入门篇

 

上面生成的API key配置到AndroidManifest.xml
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDFGLwpvnJ33QxKvHPY7MxrhbNUX29J42Y"/>

 

5.   在开发者平台找到service(这里附上几张旧的图片,仅供参考)

再到Service里面打开api功能,尤其是androidapi v2 哪项,否则无法使用申请的key

GoogleMap开发小白入门篇GoogleMap开发小白入门篇

(下面这张是最新的,上面那张在google目前网站没有找到,可能已经变成了下面的这个样子)

GoogleMap开发小白入门篇

6.   注意,你的包名必须和申请的一致才可以,修改了包名以后要重新申请,当然debug.keystore不一样也要重新申请,就是说我这里这个key你是用不了的

7.   Release版的和debug版的没什么差别的,就生成api key的SHA1不一样。 可以自己给项目打包生成的私人证书然后导出签名,那就是Release版的。
Release版的证书你不能在eclipse里面直接run的,直接run的是用debug的签名的,Release版的需要Export出正式版apk安装才能正常使用。

8.   准备工作做得差不多了,下面开始去敲代码,由于我自己也没有尝试过google地图开发,于是我收集了很多以前的博客资料,但是大多数开发的google地图资料太老旧,太肤浅,涉及功能太少。所以建议买个vpn,直接到google 开发者网站去看google给的地图最新api,这才是学习的最佳姿势(我以前也不想用vpn,觉得没必要花这个钱,但是当你真的想从初级Android跳到更高层次,墙外的世界才是真正美景,我用的速飞跃*,买的15块65G流量,用完为止,我也是第一次用,买个便宜的试试水,反正访问google网页速度还行,就算你没有薪水还是个学生,这点钱你还是花的起,更何况像开发者这样的高薪人员呢)

下面show一下高大上google api网页

GoogleMap开发小白入门篇

9.   以下是我综合收集到的博客以及参考最新google开发者平台的“最新api”做得开发解析(由于我是一边开发一边写文章,写到这里才开始正式看google api,所以可能后面的知识和编号9之前的知识相悖也说不定,如果知识相同,我就不提了,如果与前面的知识冲突,以编号9之后的为准

10.  

(1)新建项目

AS新建project没有啥好说的,但是在选择Add an activity to mobile时,我们一般选择的是第一个和第二个blank activity,这里google让我们新建Google Maps Activity,后面的步骤也类似了,项目初次build完毕后,注意在values下有个google_maps_api.xml文件。请注意,google_maps_api.xml 文件包含有关在您尝试运行应用前获取Google Maps API 密钥的说明,这个文件在project视窗下没有,在Android视窗才有,文件名后跟了个(debug

(2)获取API秘钥

获取方式上文已经提到过,这里不赘述。Google说该密钥免费。 您可将其用于您的任何调用Google Maps Android API 的应用,并且其支持的用户数量不受限制。

你可以通过点击google_maps_api.xml给的路径去直接申请

https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=(sha1码) %3B(应用包名)

 

这个路径就是map的开发指南

https://developers.google.com/maps/documentation/android/start#get-key

 

复制生成的 API 密钥,返回 Android Studio,将该 API 密钥粘贴到 google_maps_api.xml 文件的<string name="google_maps_key “….元素中。清单文件就不用去写密钥了,因为清单文件就是引用的这里的,清单文件中,权限那些也自动生成了。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

 

(3)代码篇

生成项目时,地图的布局已经写好,只是一个fragment碎片,用来显示android:name="com.google.android.gms.maps.SupportMapFragment"这个路径下的SupportMapFragment
 
生成项目时生成了继承自FragmentActivity的MapActivity代替了平时使用的MainActivity

(4)关于测试环境

您需要的模拟器映像具有的 Google API 平台应基于 Android 4.2.2 或更高版本。

我试过夜神模拟器,由于它不是桥接的本地网络,即使我使用了vpn,模拟器仍然不能连接google服务,所以没法测试,用genymotion的朋友可以试试,genymotion使用的是vitrualbox,这个平台可以设置虚拟机网卡为桥接连本地;开发环境流畅的朋友也可以试试AS自带的模拟器。最后我直接用公司从国外买回的Android机,手机中也有vpn,可以访问google(我自己的小米安装了vpn服务还是不行,我的VPN服务商坑了)

(5)运行程序

以上工作都做完了,就可以运行了,您看到的地图应该在澳大利亚悉尼位置带有一个标记。如果您未看到地图,请确认您已完成本页面上介绍的所有步骤。具体地讲,请确认您已按上文所述添加了 API 密钥。

我成功后的截图(突然想住在墙外了有没有)

(6)其他知识补充

指定 Google Play 服务版本号

在 AndroidManifest.xml 的 <application> 元素内添加以下声明。 其作用是嵌入编译应用时所用 Google Play 服务的版本。

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version"/>

 

不添加也不影响程序运行

 

外部存储权限

如果您以 Google Play 服务 SDK 8.3 版或更高版本为目标,使用 Google Maps Android API 时不再需要WRITE_EXTERNAL_STORAGE 权限。

如果您以 Google Play 服务 SDK 的早期版本为目标,则必须请求 android.permission.WRITE_EXTERNAL_STORAGE 权限。

<uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

:如果您的应用的目标平台是需要使用运行时权限的API 级别 23 (Android 6.0),则以Google Play 服务 SDK 8.3 或更高版本为目标。

自动合并到清单文件中的权限

以下权限在 Google Play 服务清单文件中定义,它们会在编译时自动合并到您的应用的清单文件中。您需要显式地将它们添加到清单文件中:

指定对 OpenGL ES 第 2 版的要求

Google Maps Android API 使用 OpenGLES 第 2 版来渲染地图。 如果未安装 OpenGL ES 第 2 版,您的地图将不会出现。 我们建议您在AndroidManifest.xml 中添加以下<uses-feature> 元素作为 <manifest> 元素的子元素:

<uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

其作用是将要求通知外部服务。 具体地讲,其作用是防止 Google Play 商店在不支持 OpenGL ES 第 2 版的设备上显示您的应用。

显示应用的证书信息

API 密钥是以应用数字证书(即其 SHA-1 指纹)的简要形式为基础。要显示证书的 SHA-1 指纹,请先确保您使用的是正确的证书。您可能有两个证书:

  • 调试证书:Android SDK 工具会在您执行调试生成阶段时自动生成此证书。此证书只能用于要测试的应用。请勿尝试发布使用调试证书签署的应用。Android 开发者文档中的在调试模式下签署部分详细介绍了调试证书。
  • 发布证书:Android SDK 工具会在您执行版本生成阶段时自动生成此证书。您也可以使用 keytool 程序生成此证书。如果您已准备好向外界发布应用,请使用此证书。
  • 注意:为了保护您的密钥库和密钥,除非您确信计算机的安全性,否则请不要在命令行中输入 storepasskeypass 参数。例如,在公共计算机上,可能会有人查看您的终端窗口历史记录或正在运行的程序列表、获取密码,然后获得对您的签署证书的写入权限。这样,他们就能修改您的应用或将其替换为他们自己的应用。
  • com.google.android.geo.API_KEY是建议使用的 API密钥元数据名称。可使用具有该名称的密钥向 Android平台上的多个基于 Google Maps API(包括 Google Maps Android API)验证身份。出于向后兼容性上的考虑,该 API还支持com.google.android.maps.v2.API_KEY名称。该旧有名称只允许向 Android Maps API v2验证身份。应用只能指定其中一个 API密钥元数据名称。如果两个都指定,API会抛出异常。