5.1 位置服务解决方案
在Android系统中可以非常容易地获取当前的位置信息,这个功能是通过谷歌地图实现的。Android系统可以无缝的支持GPS和谷歌网络地图,通常将各种不同的定位技术称为LBS。LBS是基于位置的服务(Location Based Service)的简称,它是通过电信移动运营商的无线电通信网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。
5.1.1 android.location功能类
在Android穿戴设备中,可以使用android.location类来实现定位功能。
1. Google Map API
Android系统提供了一组访问Google MAP的API,借助Google MAP及定位API,即可在地图上显示用户当前的地理位置。在Android中定义了一个名为com.google.android.maps的包,其中包含了一系列用于在Google Map上显示、控制和层叠信息的功能类,下面是该包中最重要的几个类。
● MapActivity:用于显示Google MAP的Activity类,它需要连接底层网络。
● MapView:用于显示地图的View组件,它必须和MapActivity配合使用。
● MapController:用于控制地图的移动。
● Overlay:是一个可显示于地图之上的可绘制的对象。
● GeoPoint:是一个包含经纬度位置的对象。
2.Android Location API
在Android穿戴设备中,关于定位功能的类如下所示。
● LocationManager:本类提供访问定位服务的功能,也提供了获取最佳定位提供者的功能。另外,临近警报功能(前面所说的那种功能)也可以借助该类来实现。
● LocationProvider:该类是定位提供者的抽象类。定位提供者具备周期性报告设备地理位置的功能。
● LocationListener:提供定位信息发生改变时的回调功能。必须事先在定位管理器中注册监听器对象。
● Criteria:该类使得应用能够通过在LocationProvider中设置的属性来选择合适的定位提供者。
5.1.2 实现Android定位
在Android穿戴设备中,实现定位处理的基本流程如下所示。
(1)先准备Activity类
此步骤的目的是使用Google Map API来显示地图,然后使用定位API来获取设备的当前定位信息以在Google Map上设置设备的当前位置,用户定位会随着用户的位置移动而发生改变。
首先需要一个继承MapActivity的Activity类,例如下面的代码:
要成功引用Google MAP API,还必须先在AndroidManifest.xml中定义如下信息:
(2)然后使用MapView
要让地图显示的话,需要将MapView加入应用中。例如,在布局文件(main.xml)中加入如下代码:
另外,要使用Google Map服务的话,还需要一个API key。可以通过如下方式获取API key:
● 找到USER_HOME\Local Settings\Application Data\Android目录下的debug.keystore文件。
● 使用keytool工具来生成认证信息(MD5),使用如下命令行。
● 打开“Sign Up for the Android Maps API”页面,输入之前生成的认证信息(MD5)后将获取到你的API key。
● 替换上面AndroidManifest.xml配置文件中“API_Key_String”为刚才获取的API key。
注意
上面获取API key的介绍比较简单,后面将会通过一个具体实例来演示获取API key的方法。
接下来继续补全MyGPSActivity类的代码,在此已使用MapView,例如下面的代码。
另外,必须先设置一些权限后才能使用定位信息,在文件AndroidManifest.xml中的配置方式如下。
(3)实现定位管理器
可以使用Context.getSystemService()方法实现定位管理器功能,并传入Context.LOCATION_SERVICE参数来获取定位管理器的实例。例如下面的代码。
接下来需要将原先的MyGPSActivity做一些修改,让它实现一个LocationListener接口,使其能够监听定位信息的改变。
接下来需要初始化LocationManager,并在它的onCreate()方法中注册定位监听器。例如下面的代码。
这样代码中的方法onLocationChanged()会在用户的位置发生500米距离的改变之后进行调用。这里默认使用的LocationProvider是“gps”(GSP_PROVIDER),但可以根据需要使用特定的Criteria对象调用LocationManger类的getBestProvider方法获取其他的LocationProvider。以下代码是onLocationChanged()方法的参考实现。
通过上面的代码,获取了当前的新位置并在地图上更新位置显示。还可以为应用程序添加一些诸如缩放效果、地图标注、文本等功能。
(4)添加缩放控件
(5)添加Map Overlay
最后一步是添加Map Overlay,例如通过下面的代码可以定义一个Overlay。
通过上面的Overlay会在地图上显示一段文本,接下来可以把这个Overlay添加到地图上。