Android智能穿戴设备开发实战详解
上QQ阅读APP看书,第一时间看更新

5.2 随时更新设备的位置信息

到此为止,可能会有读者疑问:如果GPS的位置信息变化后,是不是也能够及时的显示新的位置信息到界面上呢?是不是只有退出系统,然后重新启动系统后才能得到最新的GPS信息呢?其实不然,可以通过编程的方式来及时获取并更新当前的位置信息。

5.2.1 Maps库类的技巧

在Maps库中提供了十几个类,通过这些类可以实现位置更新功能。在这些库类中,最为常用的类包括MapController,Mapview,MapActivity、Overlay、Projection等。

(1)MapController

控制地图移动、伸缩,以某个GPS坐标为中心,控制MapView中的view组件,管理Overlay,提供View的基本功能。使用多种地图模式(地图模式(某些城市可实时对交通状况进行更新),卫星模式,街景模式)来查看Google Map。

常用方法有:animateTo(GeoPoint point) setCenter(GeoPoint point) setZoom(int zoom-Level)等。

(2)MapView

Mapview是用来显示地图的view,它派生自android.view.ViewGroup。当MapView获得焦点时,可以控制地图的移动和缩放。Android中的地图可以以不同的形式来显示出来,如街景模式、卫星模式等。

MapView只能被MapActivity来创建,这是因为MapView需要通过后台的线程来连接网络或者文件系统,而这些线程要由MapActivity来管理。常用方法有:getController(),getOverlays(),setSatellite(boolean),setTraffic(boolean),setStreetView(boolean),setBuiltInZoom-Controls(boolean)等。

(3)MapActivity

MapActivity是一个抽象类,任何想要显示MapView的Activity都需要派生自MapActivity。并且在其派生类的onCreate()中,都要创建一个MapView实例,可以通过MapViewconstructor(然后添加到View中ViewGroup.addView(View))或者通过layout XML来创建。

(4)Overlay

Overlay是覆盖到MapView的最上层,可以扩展其ondraw接口,自定义在MapView中显示一些自己的东西。MapView通过MapView.getOverlays()对Overlay进行管理。

除了Overlay这个基类,Google还扩展了如下两个比较有用的Overlay:

● MylocationOverlay:集成了Android.location中接收当前坐标的接口,集成SersorManager中CompassSensor的接口。只需要enableMyLocation(),enableCompass即可让程序拥有实时的MyLocation以及Compass功能(Activity.onResume()中)。

● ItemlizedOverlay:管理一个OverlayItem链表,用图片等资源在地图上进行风格相同的标记。

(5)Projection

MapView中GPS坐标与设备坐标的转换(GeoPoint和Point)。

5.2.2 LocationManager可以及时监听你

LocationManager支持监听器模式,通过调用requestLocationUpdates()方法能够为其设置一个位置监听器LocationListener。同时方法requestLocationUpdates()还需要指定要使用的位置服务类型、位置更新时间和最新位移,这样可以确保在满足用户需求的前提下使用最低的电量消耗。

例如在下面的代码中,设置了更新位置信息的最小间隔为2秒,位移变化在10米以上。如果GPS位置超过10米,且时间间隔超过2秒时,LocationListener的回调方法onLocationChanged()就会被调用,应用程序可以通过onLocationChanged来反映位置信息的变化。