Android GPS应用开发

本文详细介绍了Android系统中GPS应用的开发,包括核心API、GPS定位流程、临近警告的实现和Android 9中利用Wi-Fi RTT进行室内定位的方法。重点讲解了LocationManager、LocationProvider、LocationListener以及Criteria类的使用,同时提到了添加临近警告的方法和WLAN RTT的实现要求。
摘要由CSDN通过智能技术生成

Android GPS应用开发

一、支持GPS的核心AP

在Android开发中常常须要用到定位功能,尤其是依赖于地理位置功能的应用。大家首先想到的是使用百度地图、高德地图提供的sdk,但是在只须要经纬度或者城市、街道地址等信息并不须要提供预览地图时我们考虑使用Android系统提供的API来实现。

Android SDK 提供了 android.location 包和 Google Maps API 支持位置服务功能,开发人员可以方便地开发自己的位置服务应用程序。

1、android 定位的几种方式介绍

android 定位一般有四种方法,这四种方式分别是:GPS定位,WIFI定准,基站定位,AGPS定位

2、GPS定位相关类

在开发过程中主要使用android.location包中的LocationManager和LocationProviders对象。

2.1、LocationManager

LocationManager 类用于管理 Android 用户位置服务信息,提供确定用户位置的 API,通过这个类可以实现定位、跟踪和目标趋近等功能。

LocationManager 对象可以完成以下三个方面的任务:

  • 从用户的位置查询所有可用的 LocationProvider 列表。

  • 从特定的 LocationProvider 周期性获取用户当前位置的功能。

  • 当用户位置接近某个特定区域时,启动相关任务。

⭐️ LocationManager 对象不能直接实例化,可以通过 Context.getSystemService(Context. LOCATION_SERVICE) 方法获得。

常用方法:

  • boolean addGpsStatusListener(GpsStatus.Listener listener):添加一个监听GPS状态的监听器

  • void removeGpsStatusListener(GpsStatus.Listener listener):删除Gps状态监听器

  • List getAllProviders():获得所有LocationProvider列表

  • String getBestProvider(Criteria criteria,Boolean enabldOny):根据 criteria 返回最合适的 LocationProvider,其中 criteria 指定了一系列条件

  • Location getLastKnownLocation (String provider):获取缓存中的位置信息, 该方法不会发起监听,返回的是上一次的位置信息,但此前如果没有位置更新的话,返回的位置信息可能是错误的

  • LocationProvider getProvider (String name):获得指定名称的 LocationProvider

  • List getProviders (boolean enabledOnly):获得可用的 LocationProvider 列表

  • addProximityAlert (double latitude, double longitude, float radius, long expiration, PendingIntent intent):添加一个邻近警告

  • removeProximityAlert (PendingIntent intent):删除趋近警告

  • void requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent): 通过指定的LoactionProvider周期性地获取定位信息,并通过intent启动相应的组件

  • void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener): 通过指定的LocationProvider周期性地获取定位信息,并触发listener所对应的触发器3

  • requestSingleUpdate(String provider, LocationListener listener, Looper looper):获取一次定位结果,如果不想一直监听位置信息,那么可以用requestSingleUpdate来实现只请求一次定位,该方法也要在主线程上执行

  • isProviderEnabled(String provider):判断provider是否可用

2.2、LocationProvider

⭐️ LocationProvider 为位置提供者的抽象类,位置提供者提供手机设备周期性的地理位置报告。

常用方法:

🌰 int getAccuracy():获取LocationProvider提供位置信息的精度

🌰 String getName():获得LocationProvider的名称

🌰 int getPowerRequirement():获得LocationProvider 对电源的需求

🌰 boolean hasMonetaryCost():获取当前LocationProvider 是免费的还是收费的

🌰 boolean meetsCriteria(Criteria criteria):确定当前 LocationProvider 是否符合特定条件

🌰 boolean requiresCell():LocationProvider定位是否需要访问基站网络

🌰 boolean requiresNetwork():LocationProvider定位是否需要 Internet 网络数据

🌰boolean requiresSatellite():LocationProvider定位是否需要获取卫星数据

🌰 boolean supportsAltitude():LocationProvider提供的位置信息是否包含高度信息

🌰 boolean supportsBearing():是否能够提供方向信息

🌰 boolean supportsAltitude():LocationProvider是否能够提供速度信息

2.3、Location

⭐️ Location它就是一个代表位置信息的抽象类,记录了经纬度、海拔高度、获取坐标时间、速度、方位等

⭐️ 不过很多时候得到的Location对象为null;实时动态坐标可以在监听器locationListener的onLocationChanged(Location location)方法中来获取。

常用方法:

🌰float getAccuracy():获得定位信息的精度

🌰double getAltitude():获得定位信息的高度

🌰float getBearing():获得定位信息的方向

🌰double getLatitude():获得定位信息的纬度

🌰double getLongitude():获得定位信息的精度

🌰String getProvider():获得提供该定位信息的LocationProvider

🌰float getSpeed():获得定位信息的速度

🌰boolean hasAccuracy ():判断该定位信息是否含有精度信息

2.4、LocationListener位置监听接口

用于监听位置(包括GPS、网络、基站等所有提供位置的)变化,监听设备开关与状态。实时动态获取位置信息,首先要实现该接口,在相关方法中添加实现功能的代码,实现该接口可以使用内部类或者匿名实

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值