朱珣彭丰
摘 要:介绍了Android平台的背景,阐述了Android平台的应用开发设计方法,对Android平台的GPS定位技术与基站网络定位技术进行了对比与分析,并结合实例,探讨了Android平台的定位技术的具体实现方法。
关键词:Android 定位技术 GPS 基站网络定位
中图分类号:G64 文献标识码:A 文章编号:1672-3791(2014)02(c)-0006-03
Abstract:This paper includes the background information of Android OS,explains the design proposal of Android applications,compares and analyse GPS Technology and Network Positioning Technology,gives an example of applying positioning technology based on Android.
Key Words:Android;positioning technology;GPS;network positioning
位置是人们理解和驾驭世界的基础,了解、掌握当前的位置信息,记录人们的移动位置信息、共享人们的位置信息,都将有利于人们在快节奏的现代生活中进行相应的安排与规划。随着互联网技术、空间信息技术、移动通信技术等技术的快速发展,包括智能手机、平板电脑在内的手持移动终端的硬件性能日益增强,使得定位技术与手持移动终端设备得以有机结合。
1 Google Android移动平台的概述
Android是由Google与其他33家公司(包括手机制造商、软硬件供应商、移动电信运营商等)联合组成的开放手机联盟(OHA)联合推出与支持的智能手机操作系统[1~2]。Android使用开源策略,基于Linux内核,使用Google自制的应用程序运行环境DVM(Dalvik VM)。一般来说,Android应用程序包含Activity、Broadcast Intent Receiver、Service这3类组件。
Activity可以算是Android当中最基本的模块,在其中我们可以添加一些UI组件View,并且可对这些View设置一些事件响应的数据处理,从而完成相应的功能。Intent在Android应用程序中是相当重要的,它可以用来在Activity之间进行跳转,也可用于组件间的数据交互。BroadcastReceiver用于接收被发送出去的Intent对象,从而进行相应的事件响应和处理。Service是一种后台进程,没有用户界面,对用户而言是不可见的,一般用于持续时间较长的数据处理。
2 基于Android平台定位技术的研究
Android平台的定位技术有两种,一种是GPS定位技术,另一种是基于移动电信运营商的基站网络定位技术。
GPS的基本定位原理是:卫星不间断地发送自身的星历参数和时间信息,接收机收到这些信息后,经过计算求出自身的空间位置、时钟以及相关的其他信息(包括接收机的定位精度、移动速度等)。
基站网络定位技术的大致原理为:移动终端测量不同基站的下行导频信号,得到不同基站下行导频的TOA(Time of Arrival,到达时刻),根据该测量结果计算出移动终端到各基站的距离,再结合基站的位置坐标,就能够计算出移动终端的位置(一般采用三角公式估计算法)。
Android平台下这两种定位技术的构架如图1所示。
从图1中可以看出,尽管在Android平台上,GPS定位技术与基站网络定位技术的底层实现技术不同,但Google给这两种定位技术提供了一套相同定位接口,给应用程序设计带来了极大的便利。
Android平台的GPS定位技术与基站网络定位技术的特点如下。
(1)GPS定位技术的特点。
GPS定位技术的主要优势体现在定位精度高,可达10~50 m。其缺点为初次定位等待时间较长;GPS定位模块的功耗较大,较为耗电;对环境要求高,必须要在能够看到大面积天空的情况下才能实现定位,在封闭的室内是无法定位的;易受天气的影响和其他设备的信号干扰,在阴雨天气或者有其他GPS仪器的信号干扰时,无法正常工作。
(2)基站网络定位技术的特点。
基站网络定位技术的优势在于定位速度快、功耗小且对环境要求低,只需要有基站网络信号便可进行定位,几乎不受天气影响和其他设备的干扰。缺点在于定位精度较低,一般为500~2000 m,具体数值受到用户当前所处位置的基站密度的影响。
因此,在Android平台的定位技术上,GPS定位技术和基站网络定位技术各有优缺点,较好的运用策略是在室外且设备电力充足时采用GPS进行高精度定位,在GPS信号微弱的地铁、大楼等室内区域采用基站网络定位,从而实现无死角的定位。
3 Android平台定位技术的运用
定位技术运用的核心功能在于获得位置数据。当用户的地理位置发生改变时,需要使用实现(implements)LocationListener (android.location.LocationListener)接口的对象来接收LocationManager发送的位置更新提醒,并获得其中包含位置信息的Location对象,从该Location对象中获取位置数据,便可根据需要进行相应的操作。
基本的定位功能步骤为:
(1)开始;
(2)调用getSystemService(),获得LocationManager的Handle,即lm变量;
(3)创建实现LocationListener接口的实例对象,即mls变量;
(4)根据设定的定位方式,定位周期等参数调用lm.requestLocationUpdate()方法;
(5)等待获得定位数据(等待数据与minTime、minDistance相关);
(6)判断mls对象是否能监听到位置对象提醒;
(7)能,则mls.onLocationChanged()被调用,从Location对象参数中获取位置对象数据,转(7);不能,则转(5);
(8)判断是否关闭定位功能,否,则转(5);是,则转(8);
(9)调用LocationManage.removeUpdates()方法;
(10)结束。
通过调用Context.getSystemService(Context.LOCATION_SERVICE)方法可获得LocationManager的Handle。随后创建一个实现(implements)LocationListener接口的实例对象。
MyLocationListener实现了LocationListener接口。当MyLocationListener对象接收到LocationManager发送的位置变化提醒后,其onLocationChanged()方法便会被调用,并获得包含最新位置数据的Location对象(形参loc),在此方法体中我们可以进行相应数据操作,例如获得经度LON=loc.getLongitude()等。
创建了MyLocationListener对象后需要对其进行注册(同时也是提交更新位置数据的请求,即开启定位服务),注册后的MyLocationListener对象才能接收到LocationManager发送的位置变化提醒。注册方法是调用LocationManager的requestLocationUpdates(String provider, long minTime,float minDistance, LocationListener listener)函数。在调用requestLocationUpdates()方法时,需指定定位数据源provider,定位更新周期minTime(毫秒),定位更新最小变化距离minDistance(米),例如:
lm.requestLocationUpdates(“gps”, 60000, 200.0,mls);
定位数据源provider有两种,即GPS和Network。若欲使用GPS定位方式,则将provider指定为LocationManager.GPS_PROVIDER(或者直接使用字符串“gps”);若欲使用基站定位方式,则将provider指定为LocationManager.NETWORK_PROVIDER(或者直接使用字符串“network”)。
除了明确指定定位数据源的方式外,还可通过Criteria类使系统自动判断最佳定位数据源,方法是生成一个Criteria(android.location.Criteria)类的实例化对象,通过调用setAccuracy(),setPowerRequirement(),setSpeedAccuracy()等方法,设定系统判断规则,包括耗电量、定位精度、是否返回相对位置等一系列规则,随后调用LocationManager.getBestProvider(Criteria criteria, Boolean enabledOnly)方法,即可获得系统根据Criteria实例对象设定的规则判断出的最佳定位数据源。
定位更新周期minTime使用millisecond(毫秒)作为单位,表示LocationManager连续两次发送位置更新提醒的间隔时间。需要注意的是,设定的minTime值只能作为一个参考,实际的位置更新提醒时间间隔可能比这个值大,也可能比这个值小。定位更新最小变化距离minDistance使用meter(米)作为单位,表示LocationManager连续两次发送位置更新提醒的位置距离,当且仅当位置变化距离大于此值时,LocationManag
er才会发送位置更新提醒。如果需要尽可能快地获取位置信息,可以将minTime和minDistance都设置为0。需要指出的是,过于频繁地更新定位会消耗移动终端更多的电量,因此不建议设定小于60000 ms(1 min)的minTime值。
调用LocationManager的removeUpdates(LocationListener listener)方法可注销实现LocationListener接口的对象,停止定位服务,从而减少移动终端的内存、电量的消耗。
4 结语
目前国内的3G网络正在普及中,Android智能手机在我国的手机市场份额也在稳步上升,这对基于Android平台的定位技术相关的应用服务的发展,无疑有着极大的促进作用。Google公司在空间数据服务方面的优势显而易见,因而由OHA推出的Android平台在移动定位开发方面有着得天独厚的优势,加上Android完全开源的特性,使得移动设备制造商、移动电信运营商、软件公司等可共同参与开发,基于Android移动平台的定位技术拥有广阔的发展前景。
参考文献
[1] 基于Android平台的移动位置服务社交网络用户行为相似性分析[J].计算机应用,2012.
[2] 祝洪娇.基于Android平台的位置服务系统的设计与实现[D].北京交通大学,2012.
[3] 刘正,陈强.基于Android的GPS应用中的研究与开发[J].中国西部科技,2010,9:15.
[4] 赵建勋.基于Android平台的移动位置服务的开发与实现[J].现代商贸工业,2010,20:271.
[5] Rick Rogers,John Lombardo,Zigurd Mednieks,Blake Meike.Android Application Development[M].Sebastopol:OReilly Media,2009.
[6] 靳岩,姚尚朗.Google Android开发入门与实战[M].北京:人民邮电出版社,2009.
[7] 盖索林.Google Android开发入门指南[M].2版.北京:人民邮电出版社,2009.
(3)创建实现LocationListener接口的实例对象,即mls变量;
(4)根据设定的定位方式,定位周期等参数调用lm.requestLocationUpdate()方法;
(5)等待获得定位数据(等待数据与minTime、minDistance相关);
(6)判断mls对象是否能监听到位置对象提醒;
(7)能,则mls.onLocationChanged()被调用,从Location对象参数中获取位置对象数据,转(7);不能,则转(5);
(8)判断是否关闭定位功能,否,则转(5);是,则转(8);
(9)调用LocationManage.removeUpdates()方法;
(10)结束。
通过调用Context.getSystemService(Context.LOCATION_SERVICE)方法可获得LocationManager的Handle。随后创建一个实现(implements)LocationListener接口的实例对象。
MyLocationListener实现了LocationListener接口。当MyLocationListener对象接收到LocationManager发送的位置变化提醒后,其onLocationChanged()方法便会被调用,并获得包含最新位置数据的Location对象(形参loc),在此方法体中我们可以进行相应数据操作,例如获得经度LON=loc.getLongitude()等。
创建了MyLocationListener对象后需要对其进行注册(同时也是提交更新位置数据的请求,即开启定位服务),注册后的MyLocationListener对象才能接收到LocationManager发送的位置变化提醒。注册方法是调用LocationManager的requestLocationUpdates(String provider, long minTime,float minDistance, LocationListener listener)函数。在调用requestLocationUpdates()方法时,需指定定位数据源provider,定位更新周期minTime(毫秒),定位更新最小变化距离minDistance(米),例如:
lm.requestLocationUpdates(“gps”, 60000, 200.0,mls);
定位数据源provider有两种,即GPS和Network。若欲使用GPS定位方式,则将provider指定为LocationManager.GPS_PROVIDER(或者直接使用字符串“gps”);若欲使用基站定位方式,则将provider指定为LocationManager.NETWORK_PROVIDER(或者直接使用字符串“network”)。
除了明确指定定位数据源的方式外,还可通过Criteria类使系统自动判断最佳定位数据源,方法是生成一个Criteria(android.location.Criteria)类的实例化对象,通过调用setAccuracy(),setPowerRequirement(),setSpeedAccuracy()等方法,设定系统判断规则,包括耗电量、定位精度、是否返回相对位置等一系列规则,随后调用LocationManager.getBestProvider(Criteria criteria, Boolean enabledOnly)方法,即可获得系统根据Criteria实例对象设定的规则判断出的最佳定位数据源。
定位更新周期minTime使用millisecond(毫秒)作为单位,表示LocationManager连续两次发送位置更新提醒的间隔时间。需要注意的是,设定的minTime值只能作为一个参考,实际的位置更新提醒时间间隔可能比这个值大,也可能比这个值小。定位更新最小变化距离minDistance使用meter(米)作为单位,表示LocationManager连续两次发送位置更新提醒的位置距离,当且仅当位置变化距离大于此值时,LocationManag
er才会发送位置更新提醒。如果需要尽可能快地获取位置信息,可以将minTime和minDistance都设置为0。需要指出的是,过于频繁地更新定位会消耗移动终端更多的电量,因此不建议设定小于60000 ms(1 min)的minTime值。
调用LocationManager的removeUpdates(LocationListener listener)方法可注销实现LocationListener接口的对象,停止定位服务,从而减少移动终端的内存、电量的消耗。
4 结语
目前国内的3G网络正在普及中,Android智能手机在我国的手机市场份额也在稳步上升,这对基于Android平台的定位技术相关的应用服务的发展,无疑有着极大的促进作用。Google公司在空间数据服务方面的优势显而易见,因而由OHA推出的Android平台在移动定位开发方面有着得天独厚的优势,加上Android完全开源的特性,使得移动设备制造商、移动电信运营商、软件公司等可共同参与开发,基于Android移动平台的定位技术拥有广阔的发展前景。
参考文献
[1] 基于Android平台的移动位置服务社交网络用户行为相似性分析[J].计算机应用,2012.
[2] 祝洪娇.基于Android平台的位置服务系统的设计与实现[D].北京交通大学,2012.
[3] 刘正,陈强.基于Android的GPS应用中的研究与开发[J].中国西部科技,2010,9:15.
[4] 赵建勋.基于Android平台的移动位置服务的开发与实现[J].现代商贸工业,2010,20:271.
[5] Rick Rogers,John Lombardo,Zigurd Mednieks,Blake Meike.Android Application Development[M].Sebastopol:OReilly Media,2009.
[6] 靳岩,姚尚朗.Google Android开发入门与实战[M].北京:人民邮电出版社,2009.
[7] 盖索林.Google Android开发入门指南[M].2版.北京:人民邮电出版社,2009.
(3)创建实现LocationListener接口的实例对象,即mls变量;
(4)根据设定的定位方式,定位周期等参数调用lm.requestLocationUpdate()方法;
(5)等待获得定位数据(等待数据与minTime、minDistance相关);
(6)判断mls对象是否能监听到位置对象提醒;
(7)能,则mls.onLocationChanged()被调用,从Location对象参数中获取位置对象数据,转(7);不能,则转(5);
(8)判断是否关闭定位功能,否,则转(5);是,则转(8);
(9)调用LocationManage.removeUpdates()方法;
(10)结束。
通过调用Context.getSystemService(Context.LOCATION_SERVICE)方法可获得LocationManager的Handle。随后创建一个实现(implements)LocationListener接口的实例对象。
MyLocationListener实现了LocationListener接口。当MyLocationListener对象接收到LocationManager发送的位置变化提醒后,其onLocationChanged()方法便会被调用,并获得包含最新位置数据的Location对象(形参loc),在此方法体中我们可以进行相应数据操作,例如获得经度LON=loc.getLongitude()等。
创建了MyLocationListener对象后需要对其进行注册(同时也是提交更新位置数据的请求,即开启定位服务),注册后的MyLocationListener对象才能接收到LocationManager发送的位置变化提醒。注册方法是调用LocationManager的requestLocationUpdates(String provider, long minTime,float minDistance, LocationListener listener)函数。在调用requestLocationUpdates()方法时,需指定定位数据源provider,定位更新周期minTime(毫秒),定位更新最小变化距离minDistance(米),例如:
lm.requestLocationUpdates(“gps”, 60000, 200.0,mls);
定位数据源provider有两种,即GPS和Network。若欲使用GPS定位方式,则将provider指定为LocationManager.GPS_PROVIDER(或者直接使用字符串“gps”);若欲使用基站定位方式,则将provider指定为LocationManager.NETWORK_PROVIDER(或者直接使用字符串“network”)。
除了明确指定定位数据源的方式外,还可通过Criteria类使系统自动判断最佳定位数据源,方法是生成一个Criteria(android.location.Criteria)类的实例化对象,通过调用setAccuracy(),setPowerRequirement(),setSpeedAccuracy()等方法,设定系统判断规则,包括耗电量、定位精度、是否返回相对位置等一系列规则,随后调用LocationManager.getBestProvider(Criteria criteria, Boolean enabledOnly)方法,即可获得系统根据Criteria实例对象设定的规则判断出的最佳定位数据源。
定位更新周期minTime使用millisecond(毫秒)作为单位,表示LocationManager连续两次发送位置更新提醒的间隔时间。需要注意的是,设定的minTime值只能作为一个参考,实际的位置更新提醒时间间隔可能比这个值大,也可能比这个值小。定位更新最小变化距离minDistance使用meter(米)作为单位,表示LocationManager连续两次发送位置更新提醒的位置距离,当且仅当位置变化距离大于此值时,LocationManag
er才会发送位置更新提醒。如果需要尽可能快地获取位置信息,可以将minTime和minDistance都设置为0。需要指出的是,过于频繁地更新定位会消耗移动终端更多的电量,因此不建议设定小于60000 ms(1 min)的minTime值。
调用LocationManager的removeUpdates(LocationListener listener)方法可注销实现LocationListener接口的对象,停止定位服务,从而减少移动终端的内存、电量的消耗。
4 结语
目前国内的3G网络正在普及中,Android智能手机在我国的手机市场份额也在稳步上升,这对基于Android平台的定位技术相关的应用服务的发展,无疑有着极大的促进作用。Google公司在空间数据服务方面的优势显而易见,因而由OHA推出的Android平台在移动定位开发方面有着得天独厚的优势,加上Android完全开源的特性,使得移动设备制造商、移动电信运营商、软件公司等可共同参与开发,基于Android移动平台的定位技术拥有广阔的发展前景。
参考文献
[1] 基于Android平台的移动位置服务社交网络用户行为相似性分析[J].计算机应用,2012.
[2] 祝洪娇.基于Android平台的位置服务系统的设计与实现[D].北京交通大学,2012.
[3] 刘正,陈强.基于Android的GPS应用中的研究与开发[J].中国西部科技,2010,9:15.
[4] 赵建勋.基于Android平台的移动位置服务的开发与实现[J].现代商贸工业,2010,20:271.
[5] Rick Rogers,John Lombardo,Zigurd Mednieks,Blake Meike.Android Application Development[M].Sebastopol:OReilly Media,2009.
[6] 靳岩,姚尚朗.Google Android开发入门与实战[M].北京:人民邮电出版社,2009.
[7] 盖索林.Google Android开发入门指南[M].2版.北京:人民邮电出版社,2009.