zoukankan      html  css  js  c++  java
  • Android Google Map API V2 开发入门

    文档前提:已经下载并安装了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

  • 相关阅读:
    第六篇 面向对象
    第四篇 函数
    基本http服务性能测试(Python vs Golang)
    七种常见经典排序算法总结(C++)
    461. Hamming Distance and 477. Total Hamming Distance in Python
    2. Add Two Numbers——Python
    21. Merge Two Sorted Lists —— Python
    求两个数字的最大公约数-Python实现,三种方法效率比较,包含质数打印质数的方法
    20. Valid Parentheses
    Python列表去除重复元素
  • 原文地址:https://www.cnblogs.com/wzc0066/p/2949201.html
Copyright © 2011-2022 走看看