官方文档:https://developers.google.com/maps/documentation/android/start?hl=zh-CN

先谷歌后百度。使用google的api基本上按照官网来就好了,开发过程中遇到各种各样的问题,其实仔细看官方文 都能找到解决方法的。这篇文主要是让自己回顾总结一下。

Google Map API v2 相对v1变化了不少,千万别拿着v1的攻略做v2。

step1  准备工作:

1,需要安装两个东西,Google Play services SDK 和 Google APIs。

打开Android SDK Manager,拖到最底下找到Extras文件夹,展开,找到Google Play services,安装。

Google Play services 将安装到android SDK path下,我的目录是~/develop/android-sdk-linux/extras/google/google_play_services/

我用的是API 15(4.0.3),到对应的目录下展开,安装Google APIs。

2,导入Google Play services

File > Import,  选择Android > Existing Android Code into Workspace,找到

~/develop/android-sdk-linux/extras/google/google_play_services/libproject/google-play-services_lib/。

导入之后在eclipse里就能看到google-play-services_lib工程,如果eclipse里设置了build automatically,就会自动编译,要确保gen目录下有生成com.google.android.gms这个包,否则后面的步骤会报错。

3,按正常步骤建立自己的android project,把google-play-services_lib加入到Dependencies的库中。

在左边的Package Expolorer视窗中找到自己的project,鼠标右键,选择Properties,左边导航栏选Android,右边子窗口里找到Library,点Add,打开project selection窗口,选择google-play-services_lib,点Ok。

加入后

点OK。

回到工作区,包目录下可以看到多了两个dependence的包

4,调试环境

手机上需要安装Google服务包(com.google.android.gms.apk)和Google Play Store(com.android.vending.apk)。

我没装google服务的framework,play store其实是用不了的,但是并不影响Google Map的使用。

如果使用模拟器,创建AVD的时候 target选择对应API level的Google APIs就行了。

准备工作结束。

step 2 申请KEY

使用google的东西都必须申请一个KEY,这个KEY是和 APK的包名 及 打apk包时所用的证书 绑定的。

1,先安装keytool

eclipse->Help->Install New Software,点Add,Name填写Keytool,Loction填http://www.keytool.sourceforge.net/update ,安装完成重启eclipse,菜单栏上多了Keytool菜单。

2,找到证书的SHA1

调试阶段通过eclipse的run和debug打包的apk,都是使用默认的debug证书,这个证书的位置在home目录的.android目录下。

eclipse->Keytool->Open keystore,文件路径输入/home/用户名/.android/debug.keystore,密码是debug证书的默认密码android

打开后窗口底部出现keytool视窗,列出刚刚选择的keystore,展开,双击打开androiddebugkey,找到SHA1 Fingerprint 复制下来。

也可以通过命令行查看key,keytool的命令行操作参考http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html

3, 登陆Google APIs Console,创建KEY

用gmail账号登陆https://code.google.com/apis/console/?noredirect,新建一个project,左边导航视窗中选择Services,第一次加载可能会比较慢。

加载完后,右边窗口会出现google提供的所有服务,找到Google Maps Android API v2,把后面的trigger设置成ON,然后出现的各种协议选择accept。

导航视窗中选择API Access。点击按钮Create Android Key,弹出窗口中填写 “SHA1;包名”,create成功,返回API Access窗口就能看到Key for Android apps,把API key栏的一串字符复制下来。

step 3 可以开始codding了

1,修改manifest

回到eclipse,打开AndroidManifest.xml,在<manifest>根节点中设置地图访问许可

<!-- google map needed -->
<permission
android:name="com.xxx.xxx.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.xxx.xxx.permission.MAPS_RECEIVE"/>
<!-- google map needed -->

com.xxx.xxx是包名,注意这两句要加在<application></application>外面

其他需要的许可

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 精确位置服务 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 位置服务 -->
<uses-permission android:name="android.permission.INTERNET"/> <!-- 网络服务 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- 查询网络状态 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 写sd卡 google地图会往sd卡上写缓存数据-->
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <!-- 允许访问google的web服务 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>

申明要使用OpenGL ES,这一项是为了让不支持OpenGL的机器访问play store的时候略过这个apk。不写这一项也不影响调试。

在<application></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="@string/GOOGLE_MAP_API_KEY"/>

res/values/config.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>
<string translatable="false" name="GOOGLE_MAP_API_KEY">上一步中复制出来的API KEY</string> </resources>

GOOGLE_MAP_API_KEY 的值就是step 2.3中申请的key。

2,MapsActivity.java

layout/map.xml

 <?xml version="1.0" encoding="utf-8"?>

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<fragment
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/> <RelativeLayout android:id="@+id/debug"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
> <TextView android:id="@+id/debug_loc_marked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#f00"
android:text="debug_loc_marked"
android:layout_marginTop="0dip" /> <TextView android:id="@+id/debug_loc_my"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#f00"
android:text="debug_loc_my"
android:layout_below="@id/debug_loc_marked" />
</RelativeLayout>
</FrameLayout>

重点在7~11行,v2的地图是用Fragment来显示的

13~31行是两个用于调试的textview,显示标记所在的经纬度,及当前位置经纬度。

MapsActivity.java

先给一个简化版

public class MapsActivity extends Activity{

  public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
}
}

OK,run一下

本篇结束。上图中mark和地址获取需要额外的代码,下一篇进阶篇中再继续整理。

Google Map API v2 步步为营(一) ----- 初见地图的更多相关文章

  1. Google Map API v2 (三)----- 地图上添加标记(Marker),标记info窗口,即指定经纬度获取地址字符串

    接上篇 http://www.cnblogs.com/inkheart0124/p/3536322.html 1,在地图上打个标记 private MarkerOptions mMarkOption; ...

  2. Google Map API v2 步步为营 (二)----- Location

    接上篇. 改造一下MapsActivity: public class MapsActivity extends Activity implements LocationListener, InfoW ...

  3. Android中Google地图路径导航,使用mapfragment地图上画出线路(google map api v2)详解

    在这篇里我们只聊怎么在android中google map api v2地图上画出路径导航,用mapfragment而不是mapview,至于怎么去申请key,manifest.xml中加入的权限,系 ...

  4. google map api v2的使用详细过程,图文并茂(原创)

    上一篇中说到怎么获取key,下面来介绍怎么使用key来显示google地图 步骤1:eclipse上打开android SDK Manager,安装google play services. 步骤2: ...

  5. Google Map API v2 (四)----- 导航路径

    仍然是建议个异步小任务 private GetPathTask mGetPathTask = null; private void getGuidePath(LatLng origin){ if(mG ...

  6. Google Map API V2密钥申请

    之前用的都是v1,用的是MapView,好吧,仅仅能认命了.废话不再多说,開始android 的Google Maps Android API v2吧 之前參考了http://www.cnblogs. ...

  7. Google Map API v2 番外篇 关于gps位置偏差及修正方法探讨

    我的手机是M35C,在我自己的map activity中,通过gps获取到的经纬度比实际地址总是有500米左右的偏差. 在网上搜索了很多,都说这个是测绘局为了保密故意弄成这样的.gps全球定位系统获得 ...

  8. 谷歌地图实现车辆轨迹移动播放(google map api)

    开发技术:jquery,js baidu map api,json,ajax QQ1310651206 谷歌地图(google map api)实现车辆轨迹移动播放(google map api)

  9. Google Map API抓取地图坐标信息小程序

    因为实验室需要全国城市乡镇的地理坐标,有Execl的地名信息,需要一一查找地方的经纬度.Google Map地图实验室提供自带的查找经纬度的方法,不过需要一个点一个点的手输入,过于繁琐,所以自己利用G ...

随机推荐

  1. PYTHON---FILE IO

    import pickle shoplistfile = 'shoplist.data' shoplist = ['apple', 'mango', 'carrot'] f = open(shopli ...

  2. 【Uvalive 5834】 Genghis Khan the Conqueror (生成树,最优替代边)

    [题意] 一个N个点的无向图,先生成一棵最小生成树,然后给你Q次询问,每次询问都是x,y,z的形式, 表示的意思是在原图中将x,y之间的边增大(一定是变大的)到z时,此时最小生成数的值是多少.最后求Q ...

  3. 【HDU 1133】 Buy the Ticket (卡特兰数)

    Buy the Ticket Problem Description The "Harry Potter and the Goblet of Fire" will be on sh ...

  4. 【HDU 4898】 The Revenge of the Princess’ Knight (后缀数组+二分+贪心+...)

    The Revenge of the Princess’ Knight Problem Description There is an old country and the king fell in ...

  5. 李洪强iOS开发Swift篇—09_属性

    李洪强iOS开发Swift篇—09_属性 一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要 ...

  6. SpringMVC源码解析 - HandlerMethod

    HandlerMethod及子类主要用于封装方法调用相关信息,子类还提供调用,参数准备和返回值处理的职责. 分析下各个类的职责吧(顺便做分析目录): HandlerMethod 封装方法定义相关的信息 ...

  7. [cocos2d] 显示状态与文字

    前言: 对于显示数值与文字一般有三种方式可以使用: CCLabelTTF .CCLabelBMFont .CCLabelAtlas 详细区别可参考:cocos2d 中添加显示文字的三种方式(CCLab ...

  8. java的版本区别、下载、配置

    参考:http://blog.csdn.net/liujun13579/article/details/7684604 java的版本区别 常用的 java 程序分为  Java SE.Java EE ...

  9. [PeterDLax著泛函分析习题参考解答]第5章 赋范线性空间

    1. (a) 证明 (6) 定义了范数. (b) 证明它们在 (5) 式意义下是等价的. 证明: $$\bex |(z,u)|'\leq |(z,u)|\leq 2|(z,u)|',\quad |(z ...

  10. 统计难题 HDOJ --1251

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...