转自:http://www.cnblogs.com/mengdd/archive/2013/01/01/2841390.html
说明
因为Google Maps的API版本更新,之前的一些教程都是关于旧版本V1的,虽然Google说继续提供服务,但是不再提供API Key的申请。
而新的V2版本貌似改动还挺大。也没搜到国内有什么系统介绍的博客文章之类的(书肯定是来不及那么新了)。
断断续续折腾了大概半个月,因为对Android也不是特别熟悉,所以碰到这样那样的问题。
终于在昨天看见模拟器上跑的地图了。太感人了。
下面就主要说说要成功做成这一件事的流程吧。
因为肯定有时效性,所以打上一个时间戳:版本更新事件发生在2012年12月,而这篇博文目前的时间是2013年1月1日。
背景
一些相关的链接:
Google Maps Android API V1的介绍:
https://developers.google.com/maps/documentation/android/v1/mapkey?hl=zh-CN
Google Maps Android API v2的初步介绍:
https://developers.google.com/maps/documentation/android/
Introduction
https://developers.google.com/maps/documentation/android/intro
Getting Started
(本部分参考https://developers.google.com/maps/documentation/android/start)
1.首先安装Google Play services SDK
Google Maps Android API是作为这个SDK的一部分发行的。
这个安装是通过Android SDK Manager进行,配置好之后的Eclipse上面应该有Android SDK Manager的图标,一般的SDK版本安装和更新都在这里进行。
安装和更新Extras下的Google Play services即可。
2.获取API key
获取Maps API key需要两样东西:应用的signing certificate和它的package name。
获取这个key之后,把它加在应用程序的AndroidManifest.xml文件里即可。
为应用获取一个key还是需要好几个步骤的,下面详细说明:
获取数字证书(digital certificate)信息
数字证书有Debug和Release两种,下面主要说Debug的。
要获取一个叫做SHA-1 fingerprint的东西,作为数字证书的一个简短代表。
这个指纹(fingerprint)是通过一个哈希算法得到的字符串,为了得到你的证书的SHA-1 fingerprint,首先要找到你的debug keystore 文件,文件名叫debug.keystore。
默认情况下它和虚拟机AVD存放在一起,win7下的路径是:C:\Users\your_user_name\.android\,也可以通过Eclipse中的Windows > Prefs > Android > Build来查看这个路径。
然后,在cmd命令行里运行下列命令:
keytool -list -v -keystore "C:\Users\your_user_name\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
就显示一大堆东西,其中就有证书指纹:
SHA1那一行就包含了证书的SHA-1 fingerprint,是二十段用冒号割开的数字段,每段是两个十六进制的数。
在Google APIs Console上创建API Project
在Google APIs Console上创建项目,并且注册Maps API。
首先,去这个网址:https://code.google.com/apis/console/
用Gmail的账户登录,如果是第一次的话,需要创建项目,默认情况会创建一个叫做API Project的项目。
点击左边的Services,会在中间看到很多的APIs和Services,找到Google Maps Android API v2,然后把它设置成on,需要接受一些服务条款。
获得API Key
在左边的导航条中选择API Access。
在出来的页面中选择Create New Android Key...就可以生成key了:
然后在对话框中填入:SHA-1 指纹, 分号隔开,然后是应用的 package name.然后就会生成一个Key。
比如:
3.把API Key加入应用程序
首先,建立虚拟设备AVD和应用程序。
关于AVD,官方文档并没详细介绍,我后面会有说明。
建立好应用程序,注意包名应该和申请key时候的包名一致。
之后修改AndroidManifest.xml文件:
3.1.在<application>元素中加入子标签
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <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.example.mapdemo.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE"/>
其中com.example.mapdemo换成自己的包名。
4. AndroidManifest.xml中的其他具体设置
许可设置
<uses-permission> 作为<manifest> 的子元素,需要加入下列一些:
<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"/>
OpenGL ES V2特性支持
同样也是作为<manifest> 的子元素。
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
5.加上地图
首先布局文件:
<?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.MapFragment"/>
然后在MainActivity.java:
package com.example.mapdemo; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
遇到的问题和解决的方法
程序编译错误,显示找不到一些类
如图:
解决这个问题,首先需要把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。
(如果没有这个库请在Android SDK Manager更新,在底端的Extras里面更新Google Play services)。
第二步是添加对这个库的引用:
在自己的项目上右键,选Properties,左边选Android,然后在下面的Library里面Add刚才的google-play-services_lib。
之后程序就应该能运行了。
如果你的Eclipse中不是设置为自动build,则需要build一下google-play-services_lib这个项目。也可以选Project-Clean..
直到google-play-services_lib中的gen路径下生成了需要的包,这样引用才不会出错:
接着你可能会碰到下面的问题:
程序运行成功,但是显示This app won't run unless you update Google Play services.
如图:
有传言说V2不能在AVD上运行,可能Google还会对此问题进行更新。
经过搜索,这个问题已经在Stackoverflow上被讨论过了,链接:http://stackoverflow.com/questions/13691943/this-app-wont-run-unless-you-update-google-play-services-via-bazaar
所以看来在AVD上运行的问题已经被解决了。
解决的方法就是在AVD上安装两个包(Google Play Store和Google Play services):
vending.apk和gms.apk,(给一个网盘链接:http://pan.baidu.com/share/link?shareid=190602&uk=2701745266)(自己在豌豆荚上搜搜也行)。
并且AVD就选择普通的API 16就行,不需要是Google APIs。我选的是Android4.1 API16.
安装时把那两个包放在当前目录,用命令行安装:
之后运行程序,就出地图了:
补充说明
因为MapFragment只在API 12及之后的版本才有,所以对于之前的版本需要使用Support Library来进行辅助。
如果minSdkVersion设置为12以前的,就需要使用Support Library。
需要更改的地方是:布局文件中,把MapFragment改为SupportMapFragment。
MainActivity继承自FragmentActivity而不是Activity。(需要import android.support.v4.app.FragmentActivity;)
附上完整代码
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.maptest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> <permission android:name="com.example.maptest.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="com.example.maptest.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"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyAJRV7Rd_dlxnr8FYhQN3pEBUYFkhZWWpI"/> </application> </manifest>
package com.example.maptest; import android.os.Bundle; import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
布局文件:
<?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"/>
再次补充说明(2013/3/9)
很荣幸,有很多朋友在本博文下留言提问。
但是有点抱歉的是,我也只是个初学者,很多问题我也不太懂,只是根据我的想法提出一些建议。
如果你的问题我没有回复,那么就说明我不知道怎么解答,见谅。
我是很希望能回答每一个人的问题的,但是有些我真的也不知道怎么回答,因为也比较忙,也没有时间把各种版本的AVD都试一试,最近关于Map开发的一些事也搁置了下来,所以关于API也没有多做什么深入研究。
下面是一些提问,以及我通常会给出的答案:
1.关于Key的生成:
生成Key的时候需要用到SHA-1指纹以及应用的包名。所以换了电脑或者重新创建项目之后都要重新申请Key。
另外这个Key也分Debug和Release两种,文中只讨论了Debug版本的Key。
可以参见原链接,得到更详细的解答:https://developers.google.com/maps/documentation/android/start
2.库的添加
google_play_services这个库的添加可以解决一些找不到类的问题。
当发生错误是ClassNotFoundException,并且是找不到com.google.android.gms这个包中的类时,请检查google_play_services库的添加。
3.包的安装
文中给出的两个包(Google Play Store和Google Play services的apk包)只是我实验的时候成功的版本,注意特定的AVD版本:Android4.1 API16,和特定的时间:2013年1月1日。
关于这个问题的更多讨论可以参见:http://stackoverflow.com/questions/13691943/this-app-wont-run-unless-you-update-google-play-services-via-bazaar
这个上面有不同版本的对应的包,毕竟不同设备好像不太一样。
或者直接Google一下你的问题,其实可以得到很多很靠谱的解答的。
另外,因为各种版本升级问题等,我给的安装包可能需要升级,随着时间的改变,Android的API以及Google Play Store和Google Play services都在升级,需要一些不同的尝试吧。
也欢迎各位把自己实验成功的API版本和安装包版本分享一下。
4.APIs的使用
关于Google Maps Android API v2的进一步使用,可以参见官方文档:https://developers.google.com/maps/documentation/android/
我也没用过v1,所以关于怎么对应的问题我也不知道。
关于定位不准或者API使用的问题,我也不懂了,尽量找时间研究吧,到时候会新发博文。
要学习的东西太多了,我得提高效率了。
各位祝好!
相关推荐
首先,要使用Google Maps Android API v2,你需要在Google Developers Console上创建一个项目,并为该项目启用Google Maps Android API。然后,获取API密钥,这将是你的应用与Google Maps服务交互的关键。 在...
本示例项目"MapsV2Example"是学习如何在Android应用中集成和使用Google Maps API V2的绝佳资源。下面将详细介绍其中涉及的关键知识点。 1. **AndroidManifest.xml配置** - 首先,要在AndroidManifest.xml文件中...
Google Maps Android API v2 的集群库。 如果您使用的是库,请查看我们的分支。 特征 基于像素接近度的聚类,而不是网格成员 动画集群过渡 支持 Android v2.2 (Froyo) 及更高版本 设置 Gradle 如果您正在使用 ...
GoogleDirectionLibrary是一个专门为iOS平台设计的库,它允许开发者利用Google Maps Android API v2来实现路线导航的功能。尽管名称中包含"Android API v2",但这个库实际上是为iOS应用服务的,它通过Objective-...
1. 打开 Google Developers Console 的网页:https://developers.google.com/maps/documentation/android/start#installing_the_google_maps_android_v2_api 2. 点击“Creating an API Project”,然后点击“Google ...
在Android平台上,Google Maps Android API V2是一款强大的工具,它允许开发者将Google Maps集成到自己的应用中,提供丰富的地图功能,如定位、导航、路线规划等。本项目"google_maps_android_v2"专注于展示如何利用...
`Curve-Fit`是一个专为Android平台设计的开源库,它主要功能是在Google Maps API V2环境下实现曲线的绘制。这个库利用了数学中的贝塞尔曲线算法,使得开发者能够在地图上生成平滑、精确的曲线路径,增强了地图应用的...
在Android开发中,Google Maps API V2是一个重要的组件,它允许开发者将动态、交互式的地图集成到...随着Android系统的不断演进,使用Google Maps API V2能让你的应用保持与时俱进,提供更加丰富和个性化的地图服务。
在Android上,我们主要使用Google Maps Android API v2,它是一个专门针对Android平台的SDK,可以集成到Android应用中,为用户提供丰富的地图体验。 三、个人移动地图开发步骤 1. **设置开发环境**:首先,你需要...
Android版Google Maps API主要分为两个部分:Google Maps Android API v2和Google Places API,前者用于在Android应用中展示和操作地图,后者则提供地点搜索和解析地址等服务。 二、集成Google Maps Android API 要...
Android-GoogleDirectionLibrary 适用于Android的Google Maps Direction API助手下载由于版本2.1.2 // build.gradle (project)allprojects { repositories { mavenCentral() /* ... */ }} Gradleimplementation '...
《Google Maps JavaScript API V3 自用版本》 Google Maps JavaScript API V3 是 Google...如果在使用过程中遇到问题或有改进的建议,可以在 Google Maps JavaScript API V3 的官方论坛上提出,与其他开发者交流讨论。
首先,要使用Google Maps API V2,开发者需要在Google Developers Console上创建一个项目,并启用Google Maps Android API V2。获取到API密钥后,将其添加到项目的AndroidManifest.xml文件中,作为meta-data标签的...
本项目“GoogleMapsTest”聚焦于如何在Android应用中有效地使用Google Maps API v2,并实现自定义标记功能。以下是对这个项目的详细解读。 首先,让我们了解Google Maps API v2。它是Google提供给开发者用于在...
Android平台上使用Google地图主要涉及到使用Google Maps Android API v2。此API为开发者提供了一系列的工具和服务,使得在Android应用中集成地图成为可能,并且能够实现丰富的地图交互功能,如添加标记、绘制线条和...
总结来说,"google map v2 Demo"是一个教学示例,展示了如何在Android应用中使用Google Maps API V2来显示地图。通过理解和实践这个Demo,开发者能够掌握Android地图集成的基本步骤,为后续的复杂地图应用开发打下...
Google Maps Android API v2 Samples Samples demonstrating how to use Google Maps Android API v2. This repo contains the following samples: ApiDemos: A collection of small demos showing most features ...
在Android开发中,集成Google Maps API V2是一个常见的需求,它允许开发者在应用程序中嵌入交互式地图,提供导航、定位、标记等丰富的地图功能。本文将详细介绍如何申请Google Maps API V2的最新密钥,并提供一些...
首先,要使用Google Maps V2 API,你需要在Google Developers Console中创建一个项目,并启用Google Maps Android API。接着,获取API密钥,这是让应用能够与Google Maps服务通信的关键。 在项目中,Java是主要的...
谷歌地方 使用 Google Places API 显示附近的地点 ... 获取 Google Maps Android API V2 的 API 密钥 我们需要从 Google 获取 API 密钥才能在 Android 应用程序中使用 Google 地图。 请按照下面给出