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);
发布评论