`
rain_2372
  • 浏览: 684407 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android Map开发基础知识学习笔记

阅读更多
注册 Android 地图 API 密钥

运行:keytool -list -keystore ~/.android/debug.keystore
用得到的MD5码到http://code.google.com/intl/zh-CN/android/maps-api-signup.html注册API密钥。参考:
http://www.cnblogs.com/feisky/archive/2010/01/17/1650083.html

注册完成后会得到如下的网页:
您的密钥是:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
此密钥适用于所有使用以下指纹所对应证书进行验证的应用程序:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
下面是一个 xml 格式的示例,帮助您了解地图功能:
<com.google.android.maps.MapView
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"                   android:apiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  />

模拟器设置

建立一个"Google Inc.:Google APIs:3"的模拟器。

手机终端需要支持Google Add-ons

作为与Google合作的手机终端的制造商,如果想在自己的Android终端中集成Google的一些应用,例如map,market,picasa,sync等,需要和Google签约,这样Google会有专人帮你将这一系列服务整合到你的平台中来。

作为没有和Google合作的手机终端的制造商,我们可以使用破解的方法将Add-ons中的运行库整合到自己的framework中来(build到手机终端的system.img中)。操作如下:

1. 在Android中,额外支持Google Add-ons(Google Maps),需要将如下档案(从标准的SDK中pull出来的,也可以从GPhone中pull出来)打包进System.img。Google Add-ons只需要1--2,Goolge Maps(Google的地图程序) 需要1--5:
1)system/framework      com.google.android.maps.jar
2)system/etc/permissions  com.google.android.maps.xml
3)system/framework      com.google.android.gtalkservice.jar
4)system/etc/permissions  com.google.android.gtalkservice.xml
5)system/app          Maps.apk (Google Maps v3.0)

2.源码:Android Cupcake Release(经测试,在donut平台同样适用。)
1)编译源码(为了生成out/target目录中Android最原始的东西)
2)将以上文件加入out/target/product/generic相应目录,在源码根目录使用make snod打包,获得新的system.img

权限和Maps库设置

在manifest.xml中设置全相应的权限,比如: 
                               
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET" />

在manifest.xml中加上要用的maps库:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.package.name">
  ...
  <application android:name="MyApplication" >
    <uses-library android:name="com.google.android.maps" />
    ...
  </application>
  ...
</manifest>

Maps库分析

Maps库提供了十几个类,具体可以参考这里http://code.google.com/intl/ja/android/add-ons/google-apis/reference/index.html,包括Mapview,MapController,MapActivity等。

(1)MapController

控制地图移动,伸缩,以某个GPS坐标为中心,控制MapView中的view组件,管理Overlay,提供View的基本功能。使用多种地图模式(地图模式(某些城市可实时对交通状况进行更新),卫星模式,街景模式)来查看Google Map。

常用方法:animateTo(GeoPoint point)  setCenter(GeoPoint point)  setZoom(int zoomLevel) 等。

(2)MapView

Mapview是用来显示地图的view, 它派生自android.view.ViewGroup。当MapView获得焦点,可以控制地图的移动和缩放。

地图可以以不同的形式来显示出来,如街景模式,卫星模式等,通过setSatellite(boolean)  setTraffic(boolean), setStreetView(boolean) 方法。

MapView只能被MapActivity来创建,这是因为mapview需要通过后台的线程来连接网络或者文件系统,而这些线程要由mapActivity来管理。

需要特别说明的一点是,android 1.5中,map的zoom采用了built-in机制,可以通过setBuiltInZoomControls(boolean)来设置是否在地图上显示zoom控件。

常用方法:getController()  getOverlays()  setSatellite(boolean)  setTraffic(boolean),   setStreetView(boolean)  setBuiltInZoomControls(boolean)等。

(3)MapActivity

管理Activity的生命周期,为mapview建立及取消对map service的连接。

MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。并且在其派生类的onCreate()中,都要创建一个MapView实例,可以通过MapViewconstructor (然后添加到View中ViewGroup.addView(View)) 或者通过layout XML来创建。

(4)Overlay

Overlay是覆盖到MapView的最上层,可以扩展其ondraw接口,自定义在MapView中显示一些自己的东西。MapView通过MapView.getOverlays()对Overlay进行管理。

除了Overlay这个基类,Google还扩展了2个比较有用的Overlay

1)MylocationOverlay—集成了Android.location中接收当前坐标的接口,集成SersorManager中CompassSensor的接口
我们只需要enableMyLocation(),enableCompass就可以让我们的程序拥有实时的MyLocation以及Compass 功能(Activity.onResume()中)。

2)ItemlizedOverlay—管理一个OverlayItem链表,用图片等资源在地图上作风格相同的标记。

(5)Projection:MapView中GPS坐标与设备坐标的转换(GeoPoint和Point)。

一个简单的小例子

用一个小程序来演示一下android中地图功能的开发。主要功能是实现了地图的缩放,添加了菜单,从而可以手动选择地图的显示模式等。

Step1: 新建一个android project, 注意这里要选择的buildtarget为"GoogleAPIs"

Step 2: 修改menifest文件:

<?xmlversion="1.0"encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.map.prac"
     android:versionCode="1"
     android:versionName="1.0">
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET" />

   <application android:icon="@drawable/icon"android:label="@string/app_name">
   <uses-library android:name="com.google.android.maps" />
       <activity android:name=".MapViewPrac2"
             android:label="@string/app_name">
         <intent-filter>
          <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
       </activity>
   </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest>

Step 3: 修改layout文件,main.xml

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
   <com.google.android.maps.MapView
       android:id="@+id/map"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:enabled="true"
       android:clickable="true"
       android:apiKey="???????????????????????????????????"
       />   
</LinearLayout>

这里需要将api key中的????????????改成你自己申请到的api key.

Step4: 修改代码:
package feisky.navigation;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends MapActivity {

// 地图显示控制相关变量定义
private MapView map=null;
private MapController mapCon;

// 菜单项
final private int menuMode=Menu.FIRST;
final private int menuExit=Menu.FIRST+1;
private int chooseItem=0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        // 获取MapView
        map=(MapView)findViewById(R.id.map);
        // 设置显示模式
        map.setTraffic(true);
        map.setSatellite(false);
        map.setStreetView(true);
        // 设置可以缩放
        map.setBuiltInZoomControls(true);
       
        // 设置初始地图的中心位置
        GeoPoint geoBeijing=new GeoPoint((int)(39.95*1000000), (int)(116.37*1000000));
        mapCon=map.getController();
        mapCon.setCenter(geoBeijing);
    }
   
    @Override
public boolean onCreateOptionsMenu(Menu menu) {
// 建立菜单
    menu.add(0,menuMode,0,"地图模式");
menu.add(0, menuExit, 1, "退出");
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case menuExit:
finish();
break;
case menuMode:
Dialog dMode=new AlertDialog.Builder(this)
.setTitle("地图模式设置")
.setSingleChoiceItems(R.array.MapMode, chooseItem, new DialogInterface.OnClickListener()
{

@Override
public void onClick(DialogInterface dialog, int which) {
chooseItem=which;
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener()
{

@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
map.setSatellite(true);
//map.setTraffic(false);
//map.setStreetView(false);
break;
case 1:
//map.setSatellite(false);
map.setTraffic(true);
//map.setStreetView(false);
break;
case 2:
//map.setSatellite(false);
//map.setTraffic(false);
map.setStreetView(true);
break;
default:
break;
}
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {

}
})
.create();
dMode.show();
break;
default:
break;
}
return super.onMenuItemSelected(featureId, item);
}

@Override
protected boolean isRouteDisplayed() {
return false;
}
}
来自http://www.cnblogs.com/feisky/archive/2010/01/20/1652230.html
分享到:
评论

相关推荐

    《Android应用开发揭秘》读书笔记

    ### Android基础学习 #### 事件的监听与触发 在Android开发中,事件的监听与触发是用户界面交互的核心。事件监听器允许应用程序响应用户的动作,如点击按钮或滑动屏幕。理解如何设置和处理这些事件是创建响应式和...

    Java开发学习笔记

    Java开发学习笔记主要针对的是初学者,旨在帮助他们掌握Java编程的基础知识。下面将详细讲解Java开发中的核心概念和步骤。 一、Java环境变量设置 在开始Java编程之前,我们需要安装Java Development Kit (JDK)并...

    android学习笔记2

    总的来说,这份"android学习笔记2"涵盖了Android开发中的基础概念和百度地图的集成应用。通过自学这些内容,你将能够创建具备地图功能的Android应用,进一步提升你的编程技能。在实践中不断探索和学习,将使你在...

    JAVA学习笔记

    【JAVA学习笔记】是一份专为Java初学者设计的学习资源,包含了从基础知识到进阶概念的全面讲解。PDF版的格式使得学习者可以方便地在各种设备上阅读和打印,随时随地提升自己的Java技能。 这份笔记可能涵盖了以下几...

    javaSE基础系统学习笔记

    这份"javaSE基础系统学习笔记"涵盖了Java编程语言的基本概念、语法和常用库的使用,是初学者深入理解Java技术体系的良好参考资料。下面将详细阐述其中可能包含的知识点。 1. **Java编程基础**: - **环境配置**:...

    android之listview学习笔记附源码

    本学习笔记将深入探讨ListView的使用方法,并提供相关的源码示例,帮助开发者更好地理解和掌握ListView的精髓。 首先,ListView的核心在于Adapter,它是连接数据源与视图的关键。在Android中,我们有多种Adapter...

    Android学习笔记

    在Android学习过程中,笔记是积累知识、巩固理解的重要工具。以下是一些关于Android开发的关键知识点,结合"Android + Java笔记"的主题,我们将深入探讨这些内容。 1. **Android架构**:Android系统基于Linux内核,...

    JAVA基础学习笔记

    这份“JAVA基础学习笔记”旨在帮助初学者理解并掌握Java的核心概念。以下是对这些笔记中的关键知识点的详细解释: 1. **Java环境设置**:首先,你需要安装Java Development Kit (JDK) 并设置好环境变量,包括`JAVA_...

    android学习笔记

    ### Android学习笔记知识点详解 #### 一、Android平台组成 1. **Linux内核**:作为Android的基础,提供了操作系统的核心功能,如硬件驱动程序、内存管理等。 2. **Android运行时**:主要包括了核心库(实现Java...

    【Java基础知识】全面涵盖了JavaSE的知识点笔记

    【Java基础知识】全面涵盖了JavaSE的知识点笔记,是学习Java编程的重要参考资料,尤其适用于面试前复习基础概念。本文将深入探讨这些关键知识点,包括变量、数据类型、运算符、控制语句、面向对象编程、异常处理、...

    Android&Java; 技术笔记 等五本

    面试通常会涉及Java基础(如封装、继承、多态)、集合框架(List、Set、Map的区别与使用)、异常处理、多线程、IO流、反射机制以及JVM内存模型等。了解这些内容有助于应对面试中的技术问题。 最后,深入浅出Java ...

    Mars Android视频教程的笔记

    本笔记集合了"Mars Android视频教程"的主要知识点,旨在帮助学习者回顾和巩固课程中的核心概念。以下是根据文件名整理出的各章节内容详解: 1. **Animations.doc** - 动画是Android应用中提升用户体验的关键元素。...

    黑马程序员java基础试题、笔记

    Android开发主要基于Java,因此理解Java的基础知识是进行Android编程的前提。这部分可能涵盖了Android四大组件(Activity、Service、BroadcastReceiver、ContentProvider)、Intent机制、线程与异步处理、Android UI...

    JAVA夜未眠(java学习笔记).rar

    6. **集合框架**:List、Set、Map接口及其实现类(如ArrayList、LinkedList、HashSet、HashMap等)是Java编程中经常用到的数据结构,学习笔记会详细解释其原理和使用方法。 7. **输入输出流**:Java提供了丰富的IO...

    JAVA SE学习笔记

    通过深入学习这些知识点,并结合实践,你将能够熟练掌握Java SE的编程技能,为后续的Java EE(企业版)或者Android开发打下坚实基础。参考链接提供的博客可能包含更多实用示例和详细解释,建议进一步探索。

    Java 基础-尚硅谷学习笔记(含面试题) 2023年

    本资料“Java 基础-尚硅谷学习笔记(含面试题)2023年”旨在提供全面的Java基础知识,并结合最新的面试趋势,帮助学习者巩固基础并为面试做好准备。 1. **Java语法基础** - **变量与数据类型**:Java支持基本数据...

    java学习笔记,

    以下是一些关键的知识点,这些知识点在"java学习笔记"中可能会涵盖: 1. **Java环境配置**:在开始编程之前,你需要设置Java开发环境,包括安装JDK(Java Development Kit)和配置环境变量,如`JAVA_HOME`,`PATH`...

    java-learning:Java基础知识学习笔记

    它的设计目标是“简单、通用、面向对象、健壮、安全、性能高效、可移植、多线程”,这使得Java在各种领域得到广泛应用,如Web开发、企业级应用、移动应用(Android)、游戏开发等。 2. **环境配置**: 学习Java的...

Global site tag (gtag.js) - Google Analytics