Android(安卓)GPS学习 (二) :GPS 服务启动以及初始化流程
16lz
2021-01-24
1、GPS 服务启动
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服务的初始化。
2、函数调用
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(); }
2.1、Framework调用JNI层方法
GnssLocationProvider.java -> com_android_server_location_GnssLocationProvider.cpp
2.2 、JNI层调用Framework方法
com_android_server_location_GnssLocationProvider.cpp -> GnssLocationProvider.java
更多相关文章
- C语言函数的递归(上)
- Android(安卓)studio新建activity运行出错解决方法
- Android系统Choreographer机制实现过程
- Android学习之保持屏幕常亮的几种方法
- ActionBar setDisplayOptions 使用详解
- Android(安卓)通过字符串来获取R下面资源的ID 值
- 深入理解LayoutInflater
- 自定义view-制作一个加载中的圆形
- Android(安卓)MediaPlayer研究问题