浅析Android地理定位(GPS)

本文详细介绍了Android系统中的定位服务,包括LocationManager的使用、LocationProvider的获取和管理,以及Criteria的设置。重点讨论了如何通过getLastKnownLocation、requestLocationUpdates等方法获取GPS位置信息,同时提到了Location的精度、速度、方向等属性。还讨论了不同定位方式的特点,如GPS与网络定位的权衡。此外,文章还提及了Geocoder服务和反地理编码的过程。
摘要由CSDN通过智能技术生成

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


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;

}

requestLocationU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值