Android Map API与Android Location API 开发应用

本文详细介绍了如何在 Android 应用中集成并使用 Google Map API,包括准备工作、API 应用及关键类的使用。通过步骤指导,读者能够了解如何在应用中展示地图、控制地图显示模式、定位地点以及添加标注信息,从而快速掌握基于 Google Map 的应用开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Google对于Android提供的Map扩展库是个好东西,可以轻易开发基于Google Map地图的应用,要注意到的是com.google.android.maps库不是标准的Android sdk内容,如果之前安装sdk时没有安装时,那就需要通过"android sdk and avd manager"来安装Google Map API,如下图:

安装完毕就可以进行基于Android map api与Android location api开发应用。

一、开发前的准备工作

首先需要申请Android Map API Key,因为我们现在只要是进行测试熟悉Google map api的应用,所以可以使用Debug版的证明书即可,通过下图方法找到debug.keystore文件的位置。


然后在命令提示符下进入该目录,执行命令: keytool -list -keystore debug.keystore,当提示你输入密码时,输入默认的密码android,这样就可以取得MD5值。
最后打开申请Key的网站: 申请链接

记录下API Key,在下一步中就应用到。

开发前的准备工作还差两步就可以完成了,第一个是要建立一个基于Google API的AVD,第二个就是建立一个基于Google API的工程,这两步都是很基本的,就不详说了。

二、Google Map API的应用

之前下载的扩展包com.google.android.maps中包含了一系列用于在Google Map上显示、控制和层叠信息的功能类,以下是该包中几个最重要的类:
  • MapActivity:任何想要显示MapView的activity都需要派生自MapActivty,并且在其派生类的onCreate()中,追寻一个MapView实例。
  • MapView:用于显示地图的View组件。
  • MapController:用于控制地图的移动、缩放等。
  • Overlay:可显示于地图之上的可绘制的对象。
  • GeoPoint:包含纬度位置的对象。

下面我们将通过maps包来实现一个地图浏览的程序。
Step1: 修改AndroidManifest.xml文件,在里面定义如下信息:<uses-library android:name="com.google.android.maps"/>,注意该定义的位置(开始自己不仔细,把uses拼写成use而已,找了很久才发现是这里出了错),然后添加应用程序访问网络的权限:<uses-permission android:name="android.permission.INTERNET" />。

Step2: 在main.xml中创建MapView,代码如下:
1  < com.google.android.maps.MapView
2       android:id ="@+id/MapView01"
3      android:layout_width ="fill_parent"
4      android:layout_height ="fill_parent"
5      android:apiKey ="03KPIn4oYNLRqlYAsIie3Ad2Gmr1P5uAVBSJ35Q" />

Step3: 实现MapActivity,因为继承自MapActivity,所以要实现isRouteDisplayed方法,MapView提供3种模式的地图,如下:
  • mMapView.setTraffic(true); //设置为交通模式。
  • mMapView.setSatellite(true); //设置为卫星模式。
  • mMapView.setStreetView(true); //设置为街道模式。
  • mMapView.setBuiltInZoomComtrols(true); //设置地图是否技术缩放。

Step4: MapController的使用,如果要设置地图显示的地点以及放大的倍数等,需要使用到MapController来控制地图,可以通过如下代码来获得MapController对象:mMapController=mMapView.getController();
要定位地点,先构建一个GeoPoint对象,然后使用animateTo方法指定位置,如下面代码
1          // 设置起点为广州
2          mGeoPoint  =   new  GeoPoint(( int ) ( 23 *   1000000 ), ( int ) ( 113 *   1000000 ));
3           // 定位到广州
4          mMapController.animateTo(mGeoPoint); 

Step5: 最后付上具体实现的代码清单:
复制代码
package  info.ellic.googlemapsample;

import  com.google.android.maps.MapActivity;
import  com.google.android.maps.MapView;
import  android.os.Bundle;
import  java.util.List;
import  android.graphics.Bitmap;
import  android.graphics.BitmapFactory;
import  android.graphics.Canvas;
import  android.graphics.Paint;
import  android.graphics.Point;
import  com.google.android.maps.GeoPoint;
import  com.google.android.maps.MapController;
import  com.google.android.maps.Overlay;

public   class  GoogleMapSample  extends  MapActivity
{
    
private  MapView     mMapView;
    
private  MapController mMapController; 
    
private  GeoPoint mGeoPoint;
    
/**  Called when the activity is first created.  */
    @Override
    
public   void  onCreate(Bundle savedInstanceState)
    {
        
super .onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mMapView 
=  (MapView) findViewById(R.id.MapView01);
        
// 设置为交通模式
        
// mMapView.setTraffic(true);
        
// 设置为卫星模式
        mMapView.setSatellite( true ); 
        
// 设置为街景模式
        
// mMapView.setStreetView(false);
        
// 取得MapController对象(控制MapView)
        mMapController  =  mMapView.getController(); 
        mMapView.setEnabled(
true );
        mMapView.setClickable(
true );
        
// 设置地图支持缩放
        mMapView.setBuiltInZoomControls( true ); 
         
// 设置起点为广州
         mGeoPoint  =   new  GeoPoint(( int ) ( 23 *   1000000 ), ( int ) ( 113 *   1000000 ));
        
// 定位到广州
        mMapController.animateTo(mGeoPoint); 


        
// 设置倍数(1-21)
        mMapController.setZoom( 12 ); 
        
// 添加Overlay,用于显示标注信息
        MyLocationOverlay myLocationOverlay  =   new  MyLocationOverlay();
        List
< Overlay >  list  =  mMapView.getOverlays();
        list.add(myLocationOverlay);
    }
    
protected   boolean  isRouteDisplayed()
    {
        
return   false ;
    }
    
class  MyLocationOverlay  extends  Overlay
    {
        @Override
        
public   boolean  draw(Canvas canvas, MapView mapView,  boolean  shadow,  long  when)
        {
            
super .draw(canvas, mapView, shadow);
            Paint paint 
=   new  Paint();
            Point myScreenCoords 
=   new  Point();
            
//  将经纬度转换成实际屏幕坐标
            mapView.getProjection().toPixels(mGeoPoint, myScreenCoords);
            paint.setStrokeWidth(
1 );
            paint.setARGB(
255 255 0 0 );
            paint.setStyle(Paint.Style.STROKE);
            Bitmap bmp 
=  BitmapFactory.decodeResource(getResources(), R.drawable.home);
            canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);
            canvas.drawText(
" 广州欢迎你 " , myScreenCoords.x, myScreenCoords.y, paint);
            
return   true ;
        }
    }
}
复制代码

运行截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值