Google Maps Android API V2新版本在2012/12进行更新,需要注意几个事项:
1. 只能运行在Android2.2以及以上版本设备
2. 不能运行在模拟器中
1.首先安装Google Play services SDK
1)点击Eclipse下面的Android SDK Manager配置和更新SDK版本安装和更新
2)安装和更新Extras下的Google Play services即可
2.获取API key
获取Maps API Key需要:应用的signing certificate(数字签名)和 package name(开发的包名)
获取key后,将key加入到对应package name应用程序的AndroidManifest.xml文件里即可
2.1 获取数字证书(digital certificate)信息
数字证书有Debug和Release两种,主要说明Debug,Release参见android developer中signing your application
(http://developer.android.com/tools/publishing/app-signing.html)
1)获取一个SHA-1 fingerprint数字签名,作为数字证书的一个简短代表
这个指纹fingerprint是通过一个哈希算法得到的字符串,为了得到这个SHA1,首先找到本地的debug.keystore
通过Eclipse中Windows>preferences>Android>Build查看debug.keystore的路径
2)在cmd中运行命令:
keytool -list -v -keystore "C:\Users\your_user_name\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
从而会显示出证书指纹相关信息:
SHA1中包含了二十段用冒号割开的数字段,每段是两个16进制的数。
2.2 在Google APIS Console上创建API Project
在Google APIS Console上创建项目,并注册Maps API。
1)打开网址 :https://code.google.com/apis/console/
2)用Gmail账号登陆,如果第一次进入需要创建项目,默认会创建一个API Project的项目。
在左侧栏中点击services,会在右侧看到有很多APIS和Services,找到Google Maps Android API V2,把它设置成为on,需要接受一些服务条款
3)获取API Key
在左侧导航中选择API Access
出来的页面中选择Create New Android Key...在空白栏处填写2.1 2)中生成的SHA-1 指纹, 分号隔开,然后是应用的 package name.然后就会生成一个Key。(按照给的示例进行说明)
注意:生成的key是字符串形式的描述,而不是SHA1中的20个16进制的数字
3.把API Key加入应用程序
首先,建立虚拟设备AVD和应用程序。
关于AVD,官方文档并没详细介绍,我后面会有说明。
建立好应用程序,注意包名应该和申请key时候的包名一致。
之后修改AndroidManifest.xml文件:
3.1.在<application>元素中加入子标签
- <meta-data android:name="com.google.android.maps.v2.API_KEY"
- android:value="your_api_Key"/>
其中your_api_key置换成自己申请的API Key。
3.2.加入一些许可信息
- <permission
- android:name="com.bupt.mapDemo.permission.MAPS_RECEIVE"
- android:protectionLevel="signature"/>
- lt;uses-permission android:name = "com.bupt.mapDemo.permission.MAPS_RECEIVE"/>
- <permission
- android:name="com.bupt.mapDemo.permission.MAPS_RECEIVE"
- android:protectionLevel="signature"/>
- lt;uses-permission android:name = "com.bupt.mapDemo.permission.MAPS_RECEIVE"/>
其中com.bupt.mapDemo换成自己的包名。
<uses-permission> 作为<manifest> 的子元素,需要加入下列一些:
- <uses-permission android:name="com.bupt.mapDemo.permission.MAPS_RECEIVE"/>
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
3.3 OpenGL ES V2特性支持
同样也是作为<manifest> 的子元素。
- <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
4.加上地图
在布局文件中加入地图:
- <?xml version="1.0" encoding="utf-8"?>
- <fragment xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/map"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- class="com.google.android.gms.maps.SupportMapFragment"/>
在MainActivity.java中加入
- package com.example.mapdemo;
- import android.app.Activity;
- import android.os.Bundle;
- public class MainActivity extends FragmentActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- }
5.遇到的问题
5.1 程序编译错误,显示找不到Google Play Services中Fragment等类信息,解决方法
首先把Google Play services的类库加载进来:
在Eclipse里面选择:File > Import > Android > Existing Android Code Into Workspace然后点击Next.
之后Browse..., 找到路径下的<android-sdk-folder>/extras/google/google_play_services/libproject/google-play-services_lib, 然后选择Finish。
第二步是添加对这个库的引用:
在自己的项目上右键,选Properties,左边选Android,然后在下面的Library里面Add刚才的google-play-services_lib。
之后程序能运行了
5.2 程序运行成功,但是显示This app won't run unless you update Google Play services.
网上下载了Google Play Store和Google Play Service的apk安装后显示<code style="padding: 0px; border-width: 0px; background-color: rgb(238, 238, 238); margin: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; vertical-align: baseline;"><span style="font-size: 12px;"><span class="typ" style="color: rgb(43, 145, 175); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">Google</span><span class="pln" style="color: rgb(0, 0, 0); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;"> </span><span class="typ" style="color: rgb(43, 145, 175); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">Play</span><span class="pln" style="color: rgb(0, 0, 0); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;"> services </span><span class="kwd" style="padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">out</span><span class="pln" style="color: rgb(0, 0, 0); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;"> of date</span><span class="pun" style="color: rgb(0, 0, 0); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">.</span><span class="pln" style="color: rgb(0, 0, 0); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;"> </span><span class="typ" style="color: rgb(43, 145, 175); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">Requires</span><span class="pln" style="color: rgb(0, 0, 0); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;"> </span><span class="lit" style="padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">3025100</span><span class="pln" style="color: rgb(0, 0, 0); padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;"> but found </span><span class="lit" style="padding: 0px; border-width: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">2012110</span></span></code>
解决方法:下载最新版本的Google Play Services
5.3地图显示一片空白,只有+和-缩放按钮打印信息显示could not load map和 "Failed to find provider info for com.google.android.gsf.gservices"
解决方法:
1)权限问题
<permission android:name="com.example.trackmyexercise.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
<uses-permission android:name="com.example.tackmyexercise.permission.MAPS_RECEIVE" />
是否添加,是否把其中的包名更改成为自己的包名
2)Key是否申请正确并且添加正确
我当时将key写成了SHA1中的数字因此出现这个错误,应该将api key字符串填写进去
主要参考文章:
(一)Android Google Map API V2开发(较详细,本文主要参考这篇文章,强烈推荐)
http://www.cnblogs.com/mengdd/archive/2013/01/01/2841390.html
http://www.cnblogs.com/ljmin/archive/2013/03/18/2966346.html
http://blog.csdn.net/tonyfield/article/details/8578214
(二)倒入Android Google Map V2开发的官方示例 (写的很好,强烈推荐)
http://www.cnblogs.com/xmlspy/archive/2013/01/03/2843470.html
(三)关于Google Map Android API V2开发非常详细的资料(强烈推荐)
http://wptrafficanalyzer.in/blog/gps-and-google-map-in-android-applications-series/
(四)Google Map Android v2开发基础1-4
http://blog.csdn.net/commonslok/article/details/8662494
(五)关于5.3中的问题描述
(六)Android中使用Google Map开发可能遇到的问题