![Android智能穿戴设备开发实战详解](https://wfqqreader-1252317822.image.myqcloud.com/cover/166/31729166/b_31729166.jpg)
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类,例如下面的代码:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00115001.jpg?sign=1739043669-Be25ZGgv7YgEAbQbqLb5vbtVN5Aa4dXG-0-5724978ca3c6a62d066942edf9d3c6ba)
要成功引用Google MAP API,还必须先在AndroidManifest.xml中定义如下信息:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00115002.jpg?sign=1739043669-JZSRGMhA7aOj48QAi6UJPb4OiHrynWGA-0-9104b4eb58d57552cbed8d1b98a70dd9)
(2)然后使用MapView
要让地图显示的话,需要将MapView加入应用中。例如,在布局文件(main.xml)中加入如下代码:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00115003.jpg?sign=1739043669-FfxP0f7wYYJpS9DY7iDaD065KVKMCU6m-0-a6393d3920cd37b846bee0476efca2e9)
另外,要使用Google Map服务的话,还需要一个API key。可以通过如下方式获取API key:
● 找到USER_HOME\Local Settings\Application Data\Android目录下的debug.keystore文件。
● 使用keytool工具来生成认证信息(MD5),使用如下命令行。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00116001.jpg?sign=1739043669-B9U9PWZCc6aiGg5Kyei5I2dtEtAmSZrW-0-3eb599b185687dd1c42cc851e3d9f433)
● 打开“Sign Up for the Android Maps API”页面,输入之前生成的认证信息(MD5)后将获取到你的API key。
● 替换上面AndroidManifest.xml配置文件中“API_Key_String”为刚才获取的API key。
注意
上面获取API key的介绍比较简单,后面将会通过一个具体实例来演示获取API key的方法。
接下来继续补全MyGPSActivity类的代码,在此已使用MapView,例如下面的代码。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00116002.jpg?sign=1739043669-RhuON2s8uZul38JUr5LGDEutx2lBptzO-0-236bae1d66f92e19360b4c6a2185b595)
另外,必须先设置一些权限后才能使用定位信息,在文件AndroidManifest.xml中的配置方式如下。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00116003.jpg?sign=1739043669-qtqy1ND0nrbBmnpgb0mTCe7n41DsyQBu-0-20d65c8b58af276c53ee54dfe2a83374)
(3)实现定位管理器
可以使用Context.getSystemService()方法实现定位管理器功能,并传入Context.LOCATION_SERVICE参数来获取定位管理器的实例。例如下面的代码。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00116004.jpg?sign=1739043669-ILyHcvXaISX230KfzliqntQtC8TdcIFD-0-6bbebb06137380c1bc55fb703dd882e2)
接下来需要将原先的MyGPSActivity做一些修改,让它实现一个LocationListener接口,使其能够监听定位信息的改变。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00117001.jpg?sign=1739043669-8yirB8bXTmw3bHZKp6JnlCKf4ZUtGc7K-0-a4ccadc91945d78b8cdee100dda6debe)
接下来需要初始化LocationManager,并在它的onCreate()方法中注册定位监听器。例如下面的代码。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00117002.jpg?sign=1739043669-OLTgHLRo4Ihvv6iobYAvlgnVKmFEV4Q6-0-09ed2cfd4e8139acdb9e6981266949a5)
这样代码中的方法onLocationChanged()会在用户的位置发生500米距离的改变之后进行调用。这里默认使用的LocationProvider是“gps”(GSP_PROVIDER),但可以根据需要使用特定的Criteria对象调用LocationManger类的getBestProvider方法获取其他的LocationProvider。以下代码是onLocationChanged()方法的参考实现。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00117003.jpg?sign=1739043669-dd59HZXAFIq0JOFZLyQ7svhf2i5jzuRM-0-7b00b45c55bdc57fb4336a210e1cf156)
通过上面的代码,获取了当前的新位置并在地图上更新位置显示。还可以为应用程序添加一些诸如缩放效果、地图标注、文本等功能。
(4)添加缩放控件
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00117004.jpg?sign=1739043669-wCvVQjkwLkUEWbF6bPFGjZuX1yofX8LT-0-fbed11a016ddeaff4a969552455e2360)
(5)添加Map Overlay
最后一步是添加Map Overlay,例如通过下面的代码可以定义一个Overlay。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00118001.jpg?sign=1739043669-qPmBPB2GKWlurqiV0oTKZHJSdV0gtHOk-0-b3e355548212915d4c003e2234f5e5c0)
通过上面的Overlay会在地图上显示一段文本,接下来可以把这个Overlay添加到地图上。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00118002.jpg?sign=1739043669-LRbEm6EDoudw3Y8FRdrS63x8lEwg8vaC-0-01d81cf40a412445fba872527adbbc3f)