Android获取位置信息的方法
本文实例为大家分享了android获取位置信息的具体代码,供大家参考,具体内容如下
1.位置服务的简介:位置服务,英文翻译为location-based services,缩写为lbs,又称为定位服务或基于位置的服务,融合了gps定位、移动通信、导航等多种技术,提供与空间位置相关的综合应用服务,基于位置的服务发展很迅速,涉及商务、医疗、工作和生活的各个方面,为用户提供定位、追踪和敏感区域警告等一系列服务。比如谷歌地图,百度地图,都需要通过位置服务。
2.android平台下支持提供位置服务的api,在开发过程中主要用到locationmanager和locationproviders对象:
(1).locationmanager可以用来获取当前的位置,追踪设备的移动路线,或设定敏感区域,在进入或离开敏感区域时设备会发出特定警报 。
(2).locationproviders则是提供定位功能的组件集合,集合中的每种组件以不同的技术提供设备的当前位置,区别在于定位的精度、速度和成本等方面 。
3.接下来将讲述一个如何实现获取位置的经纬度,并且如果位置改变,如何通过位置的改变,经纬度也发生变化的例子,这里以locationmanager对象为例:
(1).首先,第一步,获取locationmanager对象,可以通过调用android.app.activity.getsystemservice()函数获取,代码如下:
string servicestring = context.location_service;// 获取的是位置服务 locationmanager locationmanager = (locationmanager) getsystemservice(servicestring);// 调用getsystemservice()方法来获取locationmanager对象
其中的location_service是android支持的系统级服务,控制位置等设备的更新。
(2).在获取到locationmanager对象后,还需要指定locationmanager的定位方法 ,然后才能够调用locationmanager.getlastknowlocation()方法获取当前位置 ,目前locationmanager主要有两种定位方法
gps定位:可以提供更加精确的位置信息,但定位速度和质量受到卫星数量和环境情况的影响,需要android.permissions.access_fine_location用户权限。
网络定位:提供的位置信息精度差,但速度较gps定位要迅速 ,利用基站或wifi访问的提供近似的位置信息,需要具有如下权限:android.permission.access_coarse_location 或 android.permission.access_fine_location。
注:(使用gps定位和网络定位的locationmanager类的静态常量不一样,gps定位的locationmanager类的静态常量为:gps_provider,网络定位的locationmanager类的静态常量为:network_provider,这两个静态常量在获取当前位置时要用到。)
下面以使用gps定位为例,获取位置信息代码如下:
string provider = locationmanager.gps_provider;// 指定locationmanager的定位方法 location location = locationmanager.getlastknownlocation(provider);// 调用getlastknownlocation()方法获取当前的位置信息
(3).通过调用location中的getlatitude()和getlonggitude()方法可以分别获取位置信息中的纬度和经度,代码如下:
double lat = location.getlatitude();//获取纬度 double lng = location.getlongitude();//获取经度
(4).在很多提供定位服务的应用程序中,不仅需要获取当前的位置信息,还需要监视位置的变化,在位置改变时调用特定的处理方法 ,其中locationmanager提供了一种便捷、高效的位置监视方法requestlocationupdates(),可以根据位置的距离变化和时间间隔设定,产生位置改变事件的条件,这样可以避免因微小的距离变化而产生大量的位置改变事件 ,locationmanager中设定监听位置变化的代码如下:
locationmanager.requestlocationupdates(provider, 2000, 10,locationlistener); // 产生位置改变事件的条件设定为距离改变10米,时间间隔为2秒,设定监听位置变化
接下来介绍上面这行代码的各个参数,第一个参数是我们之前指定locationmanager的定位方法,gps定位或网络定位,第二个参数指的是产生位置改变事件的时间间隔,单位为微秒,第三个参数指的是距离条件,单位为米,第四个参数是回调函数,用于处理位置改变事件,即设置locationlistener监听器。总的来说,那一行代码将产生位置改变事件的条件设定为距离改变10米,时间间隔为2秒。
(5).实现locationlistener的代码如下:
private final locationlistener locationlistener = new locationlistener() { @override public void onlocationchanged(location location) { // todo auto-generated method stub } @override public void onproviderdisabled(string arg0) { // todo auto-generated method stub } @override public void onproviderenabled(string arg0) { // todo auto-generated method stub } @override public void onstatuschanged(string arg0, int arg1, bundle arg2) { // todo auto-generated method stub } };
接下来对上面实现locationlistener的代码下的四个方法进行简单介绍:
onlocationchanged()这个方法在位置改变时被调用,onproviderdisabled()这个方法在用户禁用具有定位功能的硬件时被调用,onproviderenabled()这个方法在用户启用具有定位功能的硬件时被调用,onstatuschanged()这个方法在定位功能硬件状态改变时被调用,例如,从不可获取位置信息状态到可以获取位置信息的状态,反之亦然 。
(6).为了使gps定位功能生效,还需要在androidmanifest.xml文件中加入用户许可,即加入下面这行代码,加入用户权限:
<uses-permission android:name="android.permission.access_fine_location"></uses-permission>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。