现在的位置: 首页 > 综合 > 正文

Android Google Map API V2 开发入门

2013年08月16日 ⁄ 综合 ⁄ 共 4532字 ⁄ 字号 评论关闭

文档前提:已经下载并安装了Android SDK 及 Eclipse开发工具,具备开发一些常规的Android 应用等基础技能。

1. 安装Google Play services SDK
进入Eclipse的菜单: Window - Android SDK Manager,然后安装和更新Extras分类下的Google Play services即可。

2. 生成API KEY
先找到debug.keystore文件,可以通过展开菜单:Window > Preferences > Android > Build 来查看这个路径

比如我的路径是:/home/zwang/.android/debug.keystore (Linux系统)
然后通过终端执行如下命令获取哈希码:
$ cd /home/zwang/.android
$ keytool -list -v -keystore debug.keystore

然后会看到MD5及SHA1相关的字符串,其中SHA1马上会被用于生成API KEY。

进入Google APIs Console页面:code.google.com/apis/console/
先使用Gmail帐号登录(没有需先申请),然后根据系统提示点击Create project创建API工程,然后会跳转到services页面,需要在这个页面打开“Google Maps Android API v2”这个选项(使处于on的状态)。然后进入”API Access”页面,点击“Create new Android key...” 按钮,然后在对话框中填写:SHA1;com.package.name 这种形式的字符串。 其中SHA1是签名生成的那一串,com.package.name是你测试工程的名称,形如这样:
0E:10:94:C7:B9:FD:15:62:27:FC:E7:FC:0C:05:59:A7:18:41:F5:B2;com.example.mapdemo

然后点击“Create”就会创建了API KEY了(所以你的每个需要使用地图的应用都需要创建一个API KEY)

3. 创建测试工程
就是创建一个常规的Android 工程,如com.ucrobotics.mapdemo

然后修改AndroidManifest.xml文件

在<application>元素之中加入子标签:
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your_api_key"/>

注意替换上面的“your_api_key”为你真正生成的那串KEY字符。

然后在<application>标签之前添加许可信息(作为<manifest> 的子元素):
<permission android:name="com.ucrobotics.mapdemo.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
    <uses-permission android:name="com.ucrobotics.mapdemo.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

注意:里面有工程的名称,需要更改成自己的。

然后在</application>标签之后添加对OpenGL ES V2特性支持(作为<manifest> 的子元素):
<uses-feature android:glEsVersion="0x00020000" android:required="true" />

修改布局文件activity_main.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/map"
       android:name="com.google.android.gms.maps.SupportMapFragment"
       android:layout_width="wrap_content"
       android:layout_height="match_parent" />

注意:包括官网文档上都使用的com.google.android.gms.maps.MapFragment,这里推荐使用SupportMapFragment

代码
package com.ucrobotics.mapdemo;
 
import android.net.Uri;
import android.os.Bundle;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.support.v4.app.FragmentActivity;
 
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
 
public class MainActivity extends FragmentActivity {
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
 
setContentView(R.layout.activity_main);
 
//下面一段是测试定位及做标记的
GoogleMap gmap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); //获取地图对象
gmap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.58,116.20), 10)); //定位北京知春路,level 10显示
gmap.addMarker(new MarkerOptions().position(new LatLng(39.58,116.20)).title("Marker")); //在指定的 纬-经 度上做个标记(气泡)
}
}

代码很简单,但还不能运行,需要进行如下配置:

添加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,然后在下面的Library里面Add刚才的google-play-services_lib。之后程序就应该能运行了。

==========================================================

常见问题:
1. "java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable"
提示该问题时可检查下工程的gen目录,应该没有生成:com.google.android.gms,这是由于之前的services库引用出了问题。
可以参考这里:www.user.tu-berlin.de/hennroja/tutorial_...gms.R$styleable.html

2. 其它需要注意的地方就是使用SupportMapFragment和FragmentActivity

3. 对于真机运行,机器需要安装Google Map 以及 Google Play Service(中文市场为“Google Play服务”),第一个一般都会默认安装,但第二个可能需要自己安装

4. 标记有误差,比如上面的代码本意是标记北京知春路,但地图上实际标记到大兴去了,相差几十里,正在寻找原因...

参考链接:
【1】官方Getting Started: developers.google.com/maps/documentation/android/start
【2】Quick Start: docs.google.com/document/pub?id=19nQzvKP...AE9fjbJySowONZZtNHzw
【3】对地图的定制:developers.google.com/maps/documentation/android/views
【4】www.eoeandroid.com/forum.php?mod=viewthread&tid=245373
【5】www.cnblogs.com/mengdd/archive/2013/01/01/2841390.html (包含有模拟器运行解决方法)
【6】运行google提供的demo工程:developers.google.com/maps/documentation...id/intro#sample_code

抱歉!评论已关闭.