SystemServer.java的startOtherServices方法中添加LocationManagerService方法的代码如下,
frameworks/base/services/java/com/android/server/SystemServer.java
traceBeginAndSlog("StartLocationManagerService");
try {
location = new LocationManagerService(context);
ServiceManager.addService(Context.LOCATION_SERVICE, location);
添加gps服务到系统之后, SystemServer.java的startOtherServices方法中
final LocationManagerService locationF = location;
try {
if (locationF != null) locationF.systemRunning();
调用LocationManagerService的systemRunning方法,完成LocationManagerService服务的初始化。
frameworks/base/services/core/java/com/android/server/LocationManagerService.java
systemRunning方法中会调用loadProvidersLocked方法,
public void systemRunning() {
synchronized (mLock) {
// prepare providers
loadProvidersLocked();
updateProvidersLocked();
}
loadProvidersLocked方法主要是添加设备上支持的GPS定位Provider,
private void loadProvidersLocked() {
// create a passive location provider, which is always enabled
PassiveProvider passiveProvider = new PassiveProvider(this);
addProviderLocked(passiveProvider);
mEnabledProviders.add(passiveProvider.getName());
mPassiveProvider = passiveProvider;
if (GnssLocationProvider.isSupported()) {
// Create a gps location provider
GnssLocationProvider gnssProvider = new GnssLocationProvider(mContext, this,
mLocationHandler.getLooper());
mGnssSystemInfoProvider = gnssProvider.getGnssSystemInfoProvider();
mGnssBatchingProvider = gnssProvider.getGnssBatchingProvider();
mGnssMetricsProvider = gnssProvider.getGnssMetricsProvider();
mGnssStatusProvider = gnssProvider.getGnssStatusProvider();
mNetInitiatedListener = gnssProvider.getNetInitiatedListener();
addProviderLocked(gnssProvider);
mRealProviders.put(LocationManager.GPS_PROVIDER, gnssProvider);
mGnssMeasurementsProvider = gnssProvider.getGnssMeasurementsProvider();
mGnssNavigationMessageProvider = gnssProvider.getGnssNavigationMessageProvider();
mGpsGeofenceProxy = gnssProvider.getGpsGeofenceProxy();
}
GnssLocationProvider.java -> com_android_server_location_GnssLocationProvider.cpp
com_android_server_location_GnssLocationProvider.cpp -> GnssLocationProvider.java