因为最近需要写涉及到Google Maps的应用,所以就大概找了一些资料,发现网上大部分教材范例都是老版本的Google Maps api v1,这一套api已经被废弃,因为无法注册v1的api key,在网上找到了一篇《Google Maps Android API V2使用及问题解决》的博客作者是圣骑士Wind (在这里不得不感谢作者),这篇博客对于本人的帮助很大。自己又重新读了官方文档,终于能在AVD上运行地图DEMO。
正式开篇,首先,必须说明的是,假如你是新手,那么在网上找到的所以关于google maps api v1的资料已经不能再用,因为这套api已经被google废弃,也不再提供api key的注册,所以现在一般都是开发api v2或者v3,在这里说明的是v2,v2也是需要注册api key的,但注册方法略有不同,待会会说明。
Step1 你需要安装 Google Play services SDK
在SDK Manager的Extras项就可以找到Google Play Services的安装。
Step2 你需要为程序申请API KEY.具体的方法请参考圣骑士Wind的博文《Google Maps Android API V2使用及问题解决》,地址是http://www.cnblogs.com/mengdd/archive/2013/01/01/2841390.html,里面关于获取API KEY的部分写的非常详细,但我想可能会有许多人会像我一样非常的粗心,在开启Services服务的时候,会看错,请注意,在API CONSLE里开启服务的时候要选择Google Maps Android API v2, 而不是Google Maps API v2。
Step3 把API Key加入程序中
对AndroidManifest.xml进行修改。
添加如下代码。
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your_api_key"/>
把your_api_key换成你获得的api key。
然后需要进行权限注册。同样在AndroidManifest.xml中添加代码。
<permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="com.example.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"/>
将com.example.mapdemo替换成自己的包路径,根据官方文档的说明,
android.permission.ACCESS_COARSE_LOCATION
Allows the API to use WiFi or mobile cell data (or both) to determine the device's location.
android.permission.ACCESS_FINE_LOCATION
Allows the API to use the Global Positioning System (GPS) to determine the device's location to within a very small area.
一个是用基站定位+网络的方式进行定位的权限,一个是用GPS进行精确定位的权限。
Step4 OpenGL ES V2的支持
因为这个版本是支持OpenGL ES V2的,所以必须在AndroidManifest.xml中加入如下代码:
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
Step5 布局文件及源代码
布局文件
<?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.googletest; import android.os.Bundle; import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
Notice: 因为我自己的AVD是Android API 10手机也是Android 2.3.3的版本,所以需要Support Library来辅助(当然,Support Library也可以在SDK Manager安装),根据官方文档的说明,如若手机版本是低于API 12的,就需要Support Library。MainActivity继承FragmentActivity, 如若是高于12的,直接继承Activity即可。
需要注意的:
1、 需要添加Google Play Service类库,具体方法参考圣骑士Wind的博文。重新贴一次地址:http://www.cnblogs.com/mengdd/archive/2013/01/01/2841390.html。
2、 圣骑士Wind的博文里面提到关于AVD能否运行的问题,我可以很明确的说,可以在模拟器中运行,官方文档并没有说模拟器无法运行,而且经过实测是可以运行的,只是需要在模拟器中安装几个apk, 一个是Google Play Service的APK,一个是谷歌地图,而圣骑士Wind的博文里面提供的两个包其实是有缺漏的,他少提供一个谷歌地图的APK,所以一开始我按照他的提示搞一直程序崩溃。。。Orz。具体大家可以自行搜索下载。