getLastKnownLocation(String provider):根据LocationProvider获得最近一次已知的Location
getProvider(String name):根据名称来获得LocationProvider
getProviders(boolean enabledOnly):获取所有可用的LocationProvider
getProviders(Criteria criteria, boolean enabledOnly):根据指定条件获取满足条件的所有LocationProvider
isProviderEnabled(String provider):判断指定名称的LocationProvider是否可用
removeGpsStatusListener(GpsStatus.Listener listener):删除GPS状态监听器
removeProximityAlert(PendingIntent intent):删除一个临近警告
requestLocationUpdates(long minTime, float minDistance, Criteria criteria, PendingIntent intent):
通过制定的LocationProvider周期性地获取定位信息,并通过Intent启动相应的组件
requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener):
通过制定的LocationProvider周期性地获取定位信息,并触发listener所对应的触发器
2)LocationProvider(定位提供者)
这比是GPS定位组件的抽象表示,调用下述方法可以获取该定位组件的相关信息!
常用的方法如下:
getAccuracy():返回LocationProvider精度
getName():返回LocationProvider名称
getPowerRequirement():获取LocationProvider的电源需求
hasMonetaryCost():返回该LocationProvider是收费还是免费的
**meetsCriteria(**Criteria criteria):判断LocationProvider是否满足Criteria条件
requiresCell():判断LocationProvider是否需要访问网络基站
requiresNetwork():判断LocationProvider是否需要访问网络数据
requiresSatellite():判断LocationProvider是否需要访问基于卫星的定位系统
supportsAltitude():判断LocationProvider是否支持高度信息
supportsBearing():判断LocationProvider是否支持方向信息
supportsSpeed():判断是LocationProvider否支持速度信息
3)Location(位置信息)
位置信息的抽象类,我们可以调用下述方法获取相关的定位信息!
常用方法如下:
float getAccuracy():获得定位信息的精度
double getAltitude():获得定位信息的高度
float getBearing():获得定位信息的方向
double getLatitude():获得定位信息的纬度
double getLongitude():获得定位信息的精度
String getProvider():获得提供该定位信息的LocationProvider
float getSpeed():获得定位信息的速度
boolean hasAccuracy():判断该定位信息是否含有精度信息
4)Criteria(过滤条件)
获取LocationProvider时,可以设置过滤条件,就是通过这个类来设置相关条件的
常用方法如下:
setAccuracy(int accuracy):设置对的精度要求
setAltitudeRequired(boolean altitudeRequired):设置是否要求LocationProvider能提供高度的信息
setBearingRequired(boolean bearingRequired):设置是否要LocationProvider求能提供方向信息
setCostAllowed(boolean costAllowed):设置是否要求LocationProvider能提供方向信息
setPowerRequirement(int level):设置要求LocationProvider的耗电量
setSpeedRequired(boolean speedRequired):设置是否要求LocationProvider能提供速度信息
LocationManager 的api使用起来很简单,难点在于不同android机型,不同系统可能存在着很多未知的坑。最大的坑就是有的手机系统底层的定位服务是直接连接的google服务器,手机厂商没有将定位的服务器重定向为国内的定位服务商,致使我们通过LocationManager根本拿不到定位信息。
LocationManager 提供的位置提供器,默认为PASSIVE_PROVIDER,这是一个特殊的位置提供器,用来被动的接收位置信息,这个位置信息是由其他的服务提供的位置信息,而不是自己主动请求的,相当于共享了一个位置服务信息,不常用。使用比较多的还是GPS和网络定位,这两种定位方式各有特点,GPS定位精度高,但是比较耗电,而且室内很难获取到GPS经纬度。而网络定位虽然精度稍低,但耗电量比较小,而且在室内室外效果都很不错。
lm = (LocationManager) mContext.getApplicationContext()
.getSystemService(Context.LOCATION_SERVICE);
// 检查是否有相关定位权限
if(!Helper.checkPermission(mContext.getApplicationContext())){
mListener.onFail(“location no permission”);
return;
}
// 如果不传配置类,则按默认配置
if(mSiLoOption == null)
mSiLoOption = new SiLoOption();
mProvider = mSiLoOption.isGpsFirst ? Helper.getGPSProvider(lm) : Helper.getNetWorkProvider(lm);
if(mProvider == null)
mListener.onFail(“location provider no exist”);
else
getLocation(mProvider);
获取gps位置提供器的代码片段:
/**
-
gps 提供器
-
@param locationManager
-
@return
*/
public static String getGPSProvider(LocationManager locationManager) {
List prodiverlist = locationManager.getProviders(true);
// gps定位
if(prodiverlist.contains(LocationManager.GPS_PROVIDER))
return LocationManager.GPS_PROVIDER;
return null;
}