Android Google Map V2 备忘

Android中可以调用Google Play Service提供的GoogleMap API,在安装了AndroidSDK之后,下载GooglePlay sevices包(通过Android SDK Manager,Extras下的GooglePlay services)。Android版本的Google Maps API的Version1 (V1)现在已经不能生成APIKey,现在一般使用V2。

使用Android Google Map的服务,首先需要得到Android Google Map的API key,步骤如下:

1) 使用JDK提供的keytool找到SHA1验证码,使用命令行命令:

keytool -list -v –keystore debug.keystore,这里,keytool是jkd中的可执行文件,mystore.keystore在用户的目录(如windows下的C:\Users\user)下的.android文件夹下;

2) 将得到的SHA1码加上分号再加上app的包名,在GoogleAPIs Console中生成Android API Key;

3) 在GoogleAPIs Console中开启Google Maps API v2服务 ,具体在Services目录下;

4) 在Androidapp 的manifest文件中,一般都会加入如下权限(<manifest>标签下):

<permission

        android:name="hk.cityu.picguider.permission.MAPS_RECEIVE"

        android:protectionLevel="signature"/>

       

       <uses-permission android:name="hk.cityu.picguider.permission.MAPS_RECEIVE"/>

       <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"/>

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

另外,需要开启OpenGL的服务(<manifest>标签下):

<uses-feature

        android:glEsVersion="0x00020000"

       android:required="true"/>

在<application>标签下加入APIkey:

<meta-data

           android:name="com.google.android.maps.v2.API_KEY"

           android:value="你的API Key"/>

5) 布局文件:

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

<fragmentxmlns:android="http://schemas.android.com/apk/res/android"

         android:id="@+id/map"

         android:layout_width="match_parent"

         android:layout_height="match_parent"

         android:name="com.google.android.gms.maps.SupportMapFragment"/>

6) Activity类:

public class MapMarker extends FragmentActivity {

               

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.map_marker);

  }

}

7) 这里使用的是SupportMapFragment,因为目标是Android2.3.7(platform 10),在3.0以上(platform 11),可以使用Mapfragment,使用MapFragment可以容易加入比如将地图定位用户当前位置和指南针的功能。


8)基于API Key的Android app,在安装之后,需要联网验证API key(当前版本的Google Play,3.0.27),在此之前,地图会是空白,尽管会显示出zoom的放大和缩小的按钮;另外,如果API Key填写错误,也会出现这种状况。


9) 自定义InfoWindow地图中的Marker标志的Infowindow可以通过一个View类来设置,但是默认来说它并不是一个活动的View,这个View会被当成一个图片,因此默认来说,如果在info window中加入按钮,这个按钮的touch或者click的事件是不会触发的,因为它只是被当做一个静态的图片的一部分,解决方案有两种,一种是使用PopupWindow,但是会有一些显示问题,比如旋转时候需要自己手动改变;也可以重新定义包含MapFragment的ViewGroup,思路如下(已实现):

    1. 保存一个InfoWIndowAdapter中创建的自定义的infoWindow;

2. 将MapFragment包装在自定义的ViewGroup中;

3. 覆盖自定义的ViewGroup中的dispatchTouchEvent方法,将MotionEvents首先交给InfoWidow处理,如果它并不处理这个事件,那么,调用super class 的方法处理它;

4. 在这种情况下,button的状态不会改变,就是说按下也不会显示出按下的状态(外形上),可以通过一些比较hack的方法强制改变,如在按下的时候将button的图标改 变,在松开的时候将button图标改回来。

你可能感兴趣的:(android,Google,地图)