Android学习笔记(五七):使用Google Map API v2

分类:Android 1885人阅读 评论(3) 收藏 举报

本笔记将学习如何使用Google Map服务。主要参考来源为:https://developers.google.com/maps/documentation/android/start?hl=zh-CN。要在模拟器和实际手机上跑通还是费了一番周折。最新的Google Maps Android API v2已经将map服务合并到Google Play services中,但是国内手机并不提供Google Play store,也不提供Google Play services。国内的手机是否不需要进行CTS测试?换言之,本次学习对于在国内市场提供应用并没有实际意义,因为你不可能要求用户去进行额外的安装,但是将学习手机应用如何使用互联网服务。要在手机上跑Google地图服务,涉及的步骤比较多。

一、准备开发环境

1、在Eclipse上安装Google Play Services SDK。位于extra,见下图。安装后位于sdk/extras/google/google_play_services/

使用Google Map API v2_第1张图片

2、安装SDK后,将Make a copy of the Google Play services的lib project拷贝到我们的workspace中,目的是为了在我们的project中可以引入该lib。在Eclise中File -> Import, 选择Android -> Existing Android Code into Workspace, 在SDK安装的目录下,选择该lib(google-play-services_lib),将其import。

使用Google Map API v2_第2张图片

3、要使我们的project可以使用google play service lib,是通用的将library project加入到Android project的操作,目地为了在开发的应用中使用来自lib project的共享代码。在Eclipse的包浏览(一般位于左侧)中,选择我们的项目,按右键-> Properties ->在左边属处选择Android,在右边选择Library ->Project Selection对话框中点击Add ->从可选的lib project中选择目标。如下图

使用Google Map API v2_第3张图片

二、准备调测环境

无论采用模拟器还是真实手机作为调测环境,需要确保设备已经安装com.android.vending.apk(Google play store)和com.google.android.gms.apk(Google play services),然而模拟器上并没有包括这两个包,而国内手机也不包含着两个apk,这就是为何我在篇首感叹。要安装这个两个需要在网上进行search。需要注意com.google.andriod.gms.apk在2013年5月30有update。由于和Google在线提供的服务相关,这个包必须是最新,才能匹配现有的在线服务。在代码中可能进行检测:

GooglePlayServicesUtil.isGooglePlayServicesAvailable( getApplicationContext() )

如果返回ConnectionResult: SUCCESS表示可以正常使用。其他可能返回有SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID。下面左图是SERVICE_MISSING,右图是SERVICE_VERSION_UPDATE_REQUIRED的情况,都不能正常使用Map业务。上面虽然有两个button,实际不起作用,估计是无法连接到服务器导致。据说小米手机的应用商店可以跳转到Google Play,可能小米和Google达成某些协议,可能小米手机上没有什么问题。

使用Google Map API v2_第4张图片

要安装这个apk时最为麻烦的。最后的解决办法是先在模拟器上先安装华为的智汇云,在上面查找这两个应用。由于应用来源不正规,所以不建议在真实手机上安装。模拟器上安装apk没有网上说的那么复杂,要进入adb shell处理。在模拟器上的浏览器直接打开相关的网页,下载apk,然后点击进行安装即可,和手机安装没区别。安装成功后,可以看到App增加了Google Settings和Play Store两个。

使用Google Map API v2_第5张图片

还有一个更为简单的方法。用gmail帐号登录,然后找到应用下载,在那里可以下载Google Map,官方版本比较安全。

2013.9.5补充:在模拟器上使用Google Map。我们下载了Google API后,为了确保这些API能在模拟器上正常使用,在创建AVD时,我们应该选择Google API来进行创建Target,就可以在模拟器中加入相关的功能,如下图所示,不需要额外去下载。

使用Google Map API v2_第6张图片使用Google Map API v2_第7张图片

三、获取Google Map API的key

要通过Google Map API访问Google在线的地图服务,需要Google Map API Key。这个Key获取是免费的,开发者只要具有Gmail的邮箱就可。所有的Android app都必须由数字证书签发,开发者持有私有private key。由于数字证书是唯一的,作为应用的唯一标识,这是的应用商店可追踪你的应用,以及追踪你应用使用了Google Map服务。

Maps API key是基于应用的数字证书,也成为SHA-1 fingerprint。分为debug证书和release证书,对于我们的试验,使用debug。debug keystore文件位于~/.android/,如果是Windows位于C:\Users\your_user_name\.android\。Linux和用下面命令获得证书。在Windows中-keystore的参数为"C:\Users\your_user_name\.android\debug.keystore"。

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

Keytool 是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实 体(Key entity)-密钥(secret key)或者是私钥和配对公钥(采用非对称加密)可信任的证书实体(trusted certificate entries)-只包含公钥. -list 显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码 -alias 产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码 -keypass 指定密钥库的密码(获取keystore信息所需的密码)

记录下证书指纹,用它在Google APIs Console获取Map Key。Google API Console需要用Google帐号进行登录,也就是我们Gmail的帐号,这个网站貌似不是很稳定,有时请求需要发送多次才能成功,可能有间歇性拦截,反正多给点耐心吧。

使用Google Map API v2_第8张图片

使用Google Map API v2_第9张图片

使用Google Map API v2_第10张图片

OK,成功获取我们的Google Map API Key。

使用Google Map API v2_第11张图片

四、使用Google Map服务

经过以上步骤,终于将整个开发环境准备好,进入代码编写阶段。在coding的具体编写前,首先要AndroidManifest.xml中设置相应的许可,具体如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.wei.android.beginning" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />

<!--步骤(1)设置Google Map API v2 Key,其中com.wei.android.beginning为package的名字 -->
<permission android:name="com.wei.android.beginning.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<uses-permission android:name="com.wei.android.beginning.permission.MAPS_RECEIVE"/>

<!--步骤(3)设置使用Google Map服务所需的许可 -->
<uses-permission android:name="android.permission.INTERNET" /><!-- Google Map是互联网业务,允许互联网 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 允许API检查网络连接状态,已确定是否可以下载数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 允许将Google地图数据缓存在SD卡上 -->
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/><!-- 允许API访问Google的基于Web的业务 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><!-- 地图应用经常和定位相关,允许粗定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!-- 允许精确定位-->
<!--步骤(4)Google Map v2需要OpenGL ES,需要用uses-feature中声明 -->
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>

<application......>
<!--步骤(2)设置Google Map API v2 Key -->
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyDPOviDLcwanPb3D3rwdqYXFn8jikGXey0"/>
<activity ......> ...... </activity>
</application>
</manifest>

使用最为简单的的例子,在Activitiy中简单的显示提出。在Activitiy引用的layout.xml文件如下:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <fragmentxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/map"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:name="com.google.android.gms.maps.MapFragment"/>

只要在activity中,将该布局引入即可。

[java] view plain copy
  1. publicclassMainActivityextendsActivity{
  2. protectedvoidonCreate(BundlesavedInstanceState){
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.main);
  5. }
  6. }

费了好大劲,要show一下成果。显示经度为0,维度为0的地区,请看非洲……

使用Google Map API v2_第12张图片

转载自:http://blog.csdn.net/flowingflying/article/details/9092113

更多相关文章

  1. 阅读《Android 从入门到精通》(20)——图片视图
  2. 【实习项目记录】(三)调整网络图片固定宽高
  3. android 仿微信群聊头像 合成图片
  4. Android中播放GIF图片动画
  5. 2010.12.15——— android listView 显示图片
  6. Android拍照、相册选取、裁剪图片综合Demo
  7. Android 图片对比(图片相似度)代码
  8. 麦子学院android开发笔记:Android更换RatingBar图片

随机推荐

  1. [android]转发andorid基础知识
  2. Android的APK反编译技术
  3. Android Studio编译报错:sdk:minSdkVersio
  4. Eclipse下载Github用Android(安卓)Studio
  5. Android事件分发机制原理及源码分析
  6. 重温Android——调节屏幕亮度
  7. 考虑Android向后兼容的几条黄金法则
  8. Android中必须学习的八大开源项目
  9. Android ApiDemos示例解析(160):Views->L
  10. .Net 转战 Android 4.4 日常笔记(8)--常见