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图标改回来。

更多相关文章

  1. Android编程: 调试方法
  2. android:inputType标签
  3. ListView常用属性、方法
  4. Android 控件(button)对齐方法实现详解
  5. Android Studio更新升级方法
  6. android 实现 APP 保活且正常升级的方法
  7. Android保存数据几种常用方法解析
  8. Android 中插件的编写方法

随机推荐

  1. Android之ContentProvider
  2. 第十七章:android解析JSON
  3. 2011.09.01——— android 透明显示
  4. 各种android应用模仿源码
  5. Android日常小问题收集库
  6. 2011.08.31——— android 监听网络变化
  7. Android Studio修改apk打包生成名称
  8. Android网页浏览器的开发
  9. Android中Service(服务)详解
  10. Android属性动画完全解析