2024年4月16日发(作者:)

Android GPS架构分析

Daniel Wood 20101222

转载时请注明出处和作者

文章出处:

作者:Daniel Wood

---------------------------------------------------------------------

-----------

在底层得到gps的接口之后, if (orted())(在文件

中调用)语句得到true,然后进行下一步操作,在这

里new了一个GpsLocationProvider对象。代码如下:

GpsLocationProvider gpsProvider = new

GpsLocationProvider(mContext, this);

注意GpsLocationProvider构造函数里面的两个参数:mContext, this。下面来看看

GpsLocationProvider的构造函数的前面几句:

public GpsLocationProvider(Context context, ILocationManager

locationManager) {

mContext = context;

mLocationManager = locationManager;

mNIHandler = new GpsNetInitiatedHandler(context, this);

...

}

在GpsLocationProvider类里面的成员变量mLocationManager是构造函数的

第二个参数,就是说是LocationManagerService对象。这一点在这里先明确。

接着看_loadProvidersLocked函数。

private void _loadProvidersLocked() {

// Attempt to load "real" providers first

if (orted()) {

// Create a gps location provider

GpsLocationProvider gpsProvider = new

GpsLocationProvider(mContext, this);

mGpsStatusProvider = StatusProvider();

mNetInitiatedListener =

InitiatedListener();

addProvider(gpsProvider);

mGpsLocationProvider = gpsProvider;

}

// create a passive location provider, which is always enabled

PassiveProvider passiveProvider = new PassiveProvider(this);

addProvider(passiveProvider);

(e());

// initialize external network location and geocoder services

Resources resources = ources();

String serviceName = ing(

_networkLocatio

nProvider);

if (serviceName != null) {

mNetworkLocationProvider =

new LocationProviderProxy(mContext,

K_PROVIDER,

serviceName, mLocationHandler);

addProvider(mNetworkLocationProvider);

}

serviceName =

ing(_geocodePro

vider);

if (serviceName != null) {

mGeocodeProvider = new GeocoderProxy(mContext,

serviceName);