除了basic map外,高德地图api还提供了定位服务,兴趣点搜索服务,路线查找服务,离线地图服务。

现在我们看一下api中如何使用AMaplocation定位服务:

其实在android api中已经提供了android.location package,但是AMap的api提供了一个MapLocationApi.jar包,其中的定位服务基本一样,其中有几个重要的类:AMapLocation,AMapLocationListener,LocationManagerProxy,LocationProviderProxy

与 android自带的Location服务一样,AMapLocationManagerProxy类是Location服务的关键类,其意思就是Location服务的管理,而LocationProviderProxy类就是Location服务的提供者,而AMapLocation就是Location服务的实现形式,AMapLocationListener就是Location的监听器。


》Fisrtly,我们来看怎样实现GPS定位:

第一步:定义一个LocationManagerProxy类的对象,由LocationProviderPRoxy不断请求获得AMapLocation


locationManager = LocationManagerProxy.getInstance(this);
// Location API定位采用GPS定位方式,时间最短是5000毫秒
locationManager.requestLocationUpdates(
GPS_PROVIDER, 5000, 10,  AMapLocationListener);

第二步:

对获得AMapLocation进行事件处理,重写AMapLocationListener的四个方法:


@Override
public  void
 
}
@Override
public  void
 
}
@Override
public  void
 
}
@Override
public  void onStatusChanged(String provider, int
}
/**
* 过滤gps定位返回的数据
*/
@Override
public  void
if (location !=null) {
Double geoLat = location.getLatitude();
Double geoLng = location.getLongitude();
String str = ("定位成功:(" + geoLng +"," + geoLat + ")"
+ "\n精    度    :" + location.getAccuracy() +"米"
+ "\n定位方式:" + location.getProvider() +"\n定位时间:"
.convertToTime(location.getTime()));
Message msg = new
msg.obj
if (handler !=null) {
handler.sendMessage(msg);
}
}
}

ps:在重写的方法中我们定义了获得Location之后要做的事,这里就是在一个TextView中显示出来。

第三步:

在Activity的onPause()和onDestroy()中注销掉LocationManagerProxy和它的请求。


locationManager.removeUpdates(this);
.destory();




使用过andorid自带的Location服务就知道Location服务的提供者Provider有好几个值,除了GPS定位之外还有wifi定位,由于AMap中GPS默认是开启的,所以我们使用AMapLocationProxy.AMapNetwork这个Provier是就可以实现混合定位,这样就可以全面获得定位服务,获得了定位Location之后,当然要将其显示在AMap上。

》如何将定位信息显示在AMap上:

将定位服务和AMap服务集成在一起,就可以在地图上显示自己的定位:

第一步:定义AMapLocationProxy类通过AMapLocationProviderProxy获得Location服务,重写AMapLocationListener的五个方法;

第二步:设置地图上的LocationButton能响应点击事件,对点击事件设置定位地点LocationSource,

LocationSouce是com.amp.api.maps中的一个接口类,其中有一个监听器OnLocationChangeListener。


aMap.setLocationSource(LocationSource);
aMap.setMyLocationEnabled(true);

第三步:重写LocationSource的两个方法,目的是是让地图显示定位地点。


@Override
public  void
mListener
if (mAMapLocationManager ==null) {
mAMapLocationManager = LocationManagerProxy.getInstance(this);
}
/*
* mAMapLocManager.setGpsEnable(false);//
* 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true
*/
// Location API定位采用GPS和网络混合定位方式,时间最短是5000毫秒
mAMapLocationManager.requestLocationUpdates(
LocationProviderProxy.AMapNetwork, 5000, 10,this);
}
@Override
public  void
mListener =null;
if (mAMapLocationManager !=null) {
mAMapLocationManager.removeUpdates(this);
mAMapLocationManager.destory();
}
mAMapLocationManager =null;
}

第四步:注销掉获得的AMapLocationMangerProxy及其获得的服务。