1 gps打开/初始化
在Java层打开gps,其实对于gps库来说,就是执行初始化过程。
1.1 Java层分析
android系统中打开GPS的方法往数据库里面写值,
private void enableGps(boolean enable) {
try {
Settings.Secure.setLocationProviderEnabled(getContentResolver(),
LocationManager.GPS_PROVIDER, enable);
} catch (Exception e) {
}
}
最后往setting数据库中的location_providers_allowed字段写值。
putStringForUser(cr, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, provider, userId);
LocationManagerService的systemRunning方法中会监听setting数据库中的location_providers_allowed字段值的变化,
mContext.getContentResolver().registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.LOCATION_PROVIDERS_ALLOWED), true,
new ContentObserver(mLocationHandler) {
@Override
public void onChange(boolean selfChange) {
synchronized (mLock) {
updateProvidersLocked();
}
}
}, UserHandle.USER_ALL);
如果该值有变化,则调用updateProvidersLocked方法。主要的流程图如下,
在updateProvidersLocked方法中,如果支持gps,调用updateProviderListenersLocked方法,
updateProviderListenersLocked(name, true);
updateProviderListenersLocked主要方法如下,
•••••
boolean shouldBeEnabled = isAllowedByCurrentUserSettingsLocked(name);
••••
if (enabled) {
p.enable();
if (listeners > 0) {
applyRequirementsLocked(provider);
}
} else {
p.disable();
}
首先调用isAllowedByCurrentUserSettingsLocked方法读取