定位技术
2020年03月05日
在Android中进行GPS开发,需要涉及LocationManager、LocationProvider、Location三个类。LocationManager类的作用与TelephonyManager、AudioManager等服务类的作用相似,所有GPS定位相关的服务、对象都将由该对象来产生。与程序中获取TelephonyManager、AudioManager的方法相似 ,程序中获取LocationManager的实例是通过调用Context的getSystemService()方法来获取,LocationManager lm = getSystemService(Context.LOCATION_SERVICE);一旦在程序中获得了LocationManager对象之后接下来即可调用LocationManager的方法来获取GPS定位的相关服务和对象。定位提供者LocationProvider是GPS定位组件的抽象表示,Android的定位信息就是由它提供的,即,通过LocationProvider类的方法可以获取定位组件的相关信息。
Location是位置信息的抽象类,它提供了大量用来获取定位信息的方法。
上面三个类就是Android GPS支持的三个核心API,使用它们获取GPS定位信息的通用步骤为:
(1) 获取系统的LocationManager对象。
(2) 使用LocationManager,通过指定LocationProvider来获取定位信息,定位信息由Location对象来表示。
(3) 从Location对象中获取定位信息。
当前模拟器所有可用的LocationProvider有如下三个:
Ø network:由LocationManager.NETWORK_PROVIDER常量表示,它代表通过无线信号基站或Wi-fi网络获取定位信息的LocationProvider对象。
Ø passive:由LocationManager.PASSIVE_PROVIDER常量表示。
Ø gps:由LocationManager.GPS_PROVIDER常量表示,它代表通过GPS卫星获取定位信息的LocationProvider对象。
LocationManager类提供了访问定位服务的功能,该类提供了如下常用的方法。
Ø boolean addGpsStatusListener(GpsStatus.Listener listener)添加一个监听GPS状态的监听器。
Ø void addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent)设置当临近某指定位置(经度,纬度)和半径的位置时的警告信息。
Ø List<String> getAllProviders()获取所有的LocationProvider列表。
Ø String getBestProvider(Criteria criteria, boolean enabledOnly)根据指定条件返回最优的LocationProvider对象。
Ø GpsStatus getGpsStatus(GpsStatus status)获取GPS状态。
Ø Location getLastKnownLocation(String provider)根据LocationProvider获取最近一次已知的Location。
Ø LocationProvider getProvider(String name)根据名称来获取LocationProvider。
Ø List<String> getProviders(Criteria criteria, boolean enabledOnly)根据指定条件获取满足该条件的全部LocationProvider的名称。
Ø List<String> getProviders(boolean enabledOnly)获取所有可用的LocationProvider。
Ø boolean isProviderEnabled(String provider)判断指定名称的LocationProvider是否可用。
Ø void removeGpsStatusListener(GpsStatus.Listener listener)删除GPS状态监听器。
Ø void removeProximityAlert(PendingIntent intent)删除一个临近警告。
Ø void requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent)通过指定的LocationProvider周期性地获取定位信息,并通过intent启动相应的组件。
Ø void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)
通过指定的LocationProvider周期性地获取定位信息,并触发Listener所对应的触发器
我们通过调用LocationManager的getAllProviders方法获取所有LocationProvider时返回的是List<String>集合,集合元素即为LocationProvider的名称。我们还可以借助于LocationManager的getProvider(String name)方法,获取指定名称的LocationProvider对象。
但大部分时候,应用程序可能希望得到符合指定条件的LocationProvider,这就需要借助于LocationManager的getBestProvider(Criteria criteria,boolean enabledOniy)方法来获取。除了利用LocationManager类来获取LocationProvider外,我们还可以借助Criteria类来获取符合指定条件的LocationProvider。Criteria提供如下常用的方法来设置条件。
Ø void setAccuracy(int accuracy)设置对LocationProvider的精度要求。
Ø void setAltitudeRequired(boolean altitudeRequired)设置要求LocationProvider能提供高度信息。
Ø void setBearingRequired(boolean bearingRequired)设置要求LocationProvider能提供方向信息。
Ø void setCostAllowed(boolean costAllowed)设置要求LocationProvider是否免费。
Ø void setPowerRequirement(int level)设置要求LocationProvider的耗电量。
声明:以上内容来源于互联网,如有侵权请联系删除,出于分享信息及学习之目的,不代表本网站的观点、本站不对其真实性负责。