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.

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

           您的密钥是:

      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

4.       使用得到的apiKey:

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

 或者

    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中设置全相应的权限,比如:

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

http://schemas.android.com/apk/res/android"
package="com.example.package.name">
 ...
 
   
   ...
 
 ...

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

Maps库分析


Maps库提供了十几个类包括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文件:

 
http://schemas.android.com/apk/res/android"
     package="com.map.prac"
     android:versionCode="1"
     android:versionName="1.0">
   
   
   
   
                         android:label="@string/app_name">
           
               
               
           
       
   
   


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

 
http://schemas.android.com/apk/res/android"
   android:id="@+id/main"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">
           android:id="@+id/map"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:enabled="true"
       android:clickable="true"
       android:apiKey="???????????????????????????????????"
       />
 
这里需要将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 \.
788 0
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
2天前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
6天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
1月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
69 19
|
2月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
1月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
74 14

热门文章

最新文章