定位 android8.1.0,8.1.2 实现Android定位(2)

8.1.2  实现Android定位(2)

(3)实现定位管理器

可以使用Context.getSystemService()方法实现定位管理器功能,并传入Context.LOCATION_ SERVICE参数来获取定位管理器。例如下面的代码。

LocationManagerlm= (LocationManager) getSystemService(Context.LOCATION_SERVICE);

接下来将原先的MyGPSActivity做一些修改,让它实现一个LocationListener接口,使其能够监听定位信息的改变。

class MyGPSActivity extends MapActivity implements LocationListener {

…………

public void onLocationChanged(Location location) {}

public void onProviderDisabled(String provider) {}

public void onProviderEnabled(String provider) {}

public void onStatusChanged(String provider, int status, Bundle extras) {}

protected boolean isRouteDisplayed() {

return false;

}

}

接下来初始化LocationManager,并在它的onCreate()方法中注册定位监听器。例如下面的代码。

@Override

public void onCreate(Bundle savedInstanceState) {

LocationManagerlm= (LocationManager)getSystemService(Context.LOCATION_SERVICE);

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, this);

}

这样代码中的方法onLocationChanged()会在用户的位置发生500米距离的改变之后进行调用。这里默认使用的LocationProvider是"gps"(GSP_PROVIDER),但是可以根据你的需要,使用特定的Criteria对象调用LocationManger类的getBestProvider方法获取其他的 LocationProvider。以下代码是onLocationChanged()方法的参考实现。

public void onLocationChanged(Location location) {

if (location != null) {

doublelat=location.getLatitude();

doublelng=location.getLongitude();

p=newGeoPoint((int) lat * 1000000, (int) lng * 1000000);

mc.animateTo(p);

}

通过上面的代码,获取了当前的新位置并在地图上更新位置显示。还可以为应用程序添加一些诸如缩放效果、地图标注和文本等功能。

(4)添加缩放控件

//将缩放控件添加到地图上

ZoomControlszoomControls=  (ZoomControls) gMapView.getZoomControls();

zoomControls.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,

LayoutParams.WRAP_CONTENT));

gMapView.addView(zoomControls);

gMapView.displayZoomControls(true);

(5)添加Map Overlay

***一步是添加Map Overlay,例如通过下面的代码可以定义一个overlay。

class MyLocationOverlay extends com.google.android.maps.Overlay {

public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {

super.draw(canvas, mapView, shadow);

Paintpaint=newPaint();

// 将经纬度转换成实际屏幕坐标

PointmyScreenCoords=newPoint();

mapView.getProjection().toPixels(p, myScreenCoords);

paint.setStrokeWidth(1);

paint.setARGB(255, 255, 255, 255);

paint.setStyle(Paint.Style.STROKE);

Bitmapbmp=BitmapFactory.decodeResource(getResources(), R.drawable.marker);

canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);

canvas.drawText(”how are you…”, myScreenCoords.x, myScreenCoords.y, paint);

return true;

}

}

通过上面的Overlay会在地图上显示一段文本,接下来可以把这个Overlay添加到地图上去。

MyLocationOverlaymyLocationOverlay=newMyLocationOverlay();

Listlist=gMapView.getOverlays();

list.add(myLocationOverlay);

【责任编辑:book TEL:(010)68476606】

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值