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

更多相关文章

  1. C语言函数的递归(上)
  2. Android(安卓)studio新建activity运行出错解决方法
  3. Android系统Choreographer机制实现过程
  4. Android学习之保持屏幕常亮的几种方法
  5. ActionBar setDisplayOptions 使用详解
  6. Android(安卓)通过字符串来获取R下面资源的ID 值
  7. 深入理解LayoutInflater
  8. 自定义view-制作一个加载中的圆形
  9. Android(安卓)MediaPlayer研究问题

随机推荐

  1. Android(安卓)xml资源文件中@、@android:
  2. Activity以dialog形式打开
  3. Android中Selector的用法
  4. android自定义view属性
  5. Android(Lollipop/5.0) Material Design(
  6. Android(安卓)使用Android(安卓)Studio +
  7. android ellipsize 属性详解
  8. android中用Spannable在TextView中设置超
  9. android ui界面设计参数讲解
  10. Android(安卓)TextView常用属性介绍Andro