zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/kdkler/p/6196751.html
Copyright © 2011-2022 走看看