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