Android MapView简单使用

简介: 1. 首先先要获取你的debug keystore位置: 打开Eclipse--->Windows---> preferences--->Android--->Build 查看默认的debug keystore位置,我的是C:\Documents and Settings\Administrator\.android\debug.keystore 2.

1. 首先先要获取你的debug keystore位置:

打开Eclipse--->Windows---> preferences--->Android--->Build
查看默认的debug keystore位置,我的是C:\Documents and Settings\Administrator\.android\debug.keystore

2.
C:\Program Files\Java\jdk1.6.0_04\jre\bin>keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator\.android\debug.keystore" -storepass android -keypass android
androiddebugkey, 2009-7-25, PrivateKeyEntry,
认证指纹 (MD5): DA:D5:6E:C2:80:D1:0F:0D:F8:2A:58:6A:74:7C:CE:2D

3.
   打开http://code.google.com/intl/zh-CN/android/maps-api-signup.html

填入你的认证指纹(MD5)即可获得apiKey了,结果显示如下:
         感谢您注册 Android 地图 API 密钥!

            您的密钥是:

       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

4.       使用得到的apiKey:

              在layout中加入MapView
              <com.google.android.maps.MapView
                      android:id="@+id/mapview"
                      android:layout_width="fill_parent"
                      android:layout_height="fill_parent"
                      android:apiKey="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g" />

  或者

  <view android:id="@+id/mv"
   class="com.google.android.maps.MapView"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:layout_weight="1" 
   android:apiKey="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g" 
   />

5.Android在sdk1.5的预装的add-on中提供了一个Map扩展库com.google.android.maps,利用它你就可以给你的android应用程序增加上强大的地图功能了。这个库的位置在Your-SDK_DIR\add-ons\google_apis-3\libs.
一定要在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>

需要说明的是这个库不是标准的android sdk的内容,你也可以自己从这里这里下载并放到你的sdk里面。

Maps库分析


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

 

Mapview是用来显示地图的view, 它也是派生自android.view.ViewGroup。

地图可以以不同的形式来显示出来,如街景模式,卫星模式等,具体方法可以参考:

setSatellite(boolean), setTraffic(boolean), and setStreetView(boolean)

 

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


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


MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。并且在其派生类的onCreate()中,都要创建一个MapView实例,可以通过MapView constructor (then add it to a layout View with ViewGroup.addView(View)) 或者通过layout XML来创建。

 

实例分析


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

Step 1: 新建一个android project, 注意这里要选择的build target为"Google APIs"


Step 2: 修改menifest文件:

<?xml version="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

<?xml version="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.

 


Step 4: 修改代码:

package com.map.prac; 
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.util.Log; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuItem; 
public class MapViewPrac2 extends MapActivity { 
    private final String TAG = "MapPrac"; 
    private MapView mapView = null; 
    private MapController mc; 
    //Menu items 
    final private int menuMode = Menu.FIRST; 
    final private int menuExit = Menu.FIRST+1; 
    final private int menuCommandList = Menu.FIRST + 2; 
    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 = (MapView)findViewById(R.id.map); 
        mc = mapView.getController(); 
        mapView.setTraffic(true); // 
        mapView.setSatellite(false); 
        mapView.setStreetView(true); 
        //GeoPoint gp = new GeoPoint((int)(39.269259 * 1000000), (int)(115.255762 * 1000000));//yixian 
        GeoPoint gp = new GeoPoint((int)(39.95 * 1000000), (int)(116.37 * 1000000));//beijing 
        //mc.animateTo(gp); 
        //mc.setZoom(12); 
        mc.setCenter(gp); 
        //to display zoom control in MapView 
        mapView.setBuiltInZoomControls(true); 
    } 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
        // TODO Auto-generated method stub 
        Log.i(TAG,"enter onKeyDown"); 
        return super.onKeyDown(keyCode, event); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        menu.add(0, menuMode, 0, "Map Mode"); 
        menu.add(0, menuCommandList, 1, "Command List"); 
        menu.add(0, menuExit, 2, "Exit"); 
        return super.onCreateOptionsMenu(menu); 
    } 
    @Override 
    public boolean onMenuItemSelected(int featureId, MenuItem item) { 
        // TODO Auto-generated method stub 
        switch(item.getItemId()) 
        { 
        case menuMode: 
            Dialog dMode = new AlertDialog.Builder(this) 
            //.setIcon(R.drawable.alert_dialog_icon) 
            .setTitle(R.string.alert_dialog_single_choice) 
            .setSingleChoiceItems(R.array.select_dialog_items2, chooseItem, new DialogInterface.OnClickListener() { 
                public void onClick(DialogInterface dialog, int whichButton) { 
                    Log.i(TAG, "choose button is "+ whichButton); 
                    chooseItem = whichButton; 
                    /* User clicked on a radio button do some stuff */ 
                } 
            }) 
            .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { 
                public void onClick(DialogInterface dialog, int whichButton) { 
                    /* User clicked Yes so do some stuff */ 
                    Log.i(TAG,"item = "+chooseItem); 
                    switch(chooseItem) 
                    { 
                    case 0: 
                        mapView.setSatellite(false); 
                        break; 
                    case 1: 
                        mapView.setSatellite(true); 
                        break; 
                    case 2: 
                        mapView.setTraffic(true); 
                        break; 
                    case 3: 
                        mapView.setStreetView(true); 
                        break; 
                    default: 
                        break; 
                    } 
                } 
            }) 
            .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { 
                public void onClick(DialogInterface dialog, int whichButton) { 
                    /* User clicked No so do some stuff */ 
                } 
            }) 
           .create(); 
            dMode.show(); 
            break; 
        case menuCommandList: 
            //create the dialog 
            Dialog d = new AlertDialog.Builder(this) 
            .setTitle(R.string.select_dialog) 
            .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() { 
                public void onClick(DialogInterface dialog, int which) { 
                    /* User clicked so do some stuff */ 
                    String[] items = getResources().getStringArray(R.array.select_dialog_items); 
                    /*new AlertDialog.Builder(this) 
                            .setMessage("You selected: " + which + " , " + items[which]) 
                            .show();*/ 
                    Log.i(TAG,"you choose is: " + items[which]); 
                } 
            }) 
            .create(); 
            //show the dialog 
            d.show(); 
            break; 
        case menuExit: 
            finish(); 
            break; 
        default: 
                break; 
        } 
        return super.onMenuItemSelected(featureId, item); 
    } 
    @Override 
    protected boolean isRouteDisplayed() { 
        // TODO Auto-generated method stub 
        return false; 
    } 
}

目录
相关文章
|
定位技术 Android开发
Android MapView 申请apiKey
1. 首先先要获取你的debug keystore位置: 打开Eclipse--->Windows--->Preferences--->Android--->Build 查看默认的debug keystore位置,我的是C:\Documents and Settings\MYNAME \.
783 0
|
11天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
16天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
2天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
18天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
20天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
18天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!