diff --git a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java index e48412ab40292..47d6d8e4eeb45 100644 --- a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java @@ -271,6 +271,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private long mStartedChangedElapsedRealtime; private int mFixInterval = 1000; + // True if handleInitialize() has finished; + @GuardedBy("mLock") + private boolean mInitialized; + private ProviderRequest mProviderRequest; private int mPositionMode; @@ -569,6 +573,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } updateEnabled(); + synchronized (mLock) { + mInitialized = true; + } } private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @@ -1714,8 +1721,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } // Re-register network callbacks to get an update of available networks right away. - mNetworkConnectivityHandler.unregisterNetworkCallbacks(); - mNetworkConnectivityHandler.registerNetworkCallbacks(); + synchronized (mLock) { + if (mInitialized) { + mNetworkConnectivityHandler.unregisterNetworkCallbacks(); + mNetworkConnectivityHandler.registerNetworkCallbacks(); + } + } } @Override diff --git a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java index a7fffe2ddf29a..c0cce6f320291 100644 --- a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java +++ b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java @@ -303,6 +303,7 @@ class GnssNetworkConnectivityHandler { void unregisterNetworkCallbacks() { mConnMgr.unregisterNetworkCallback(mNetworkConnectivityCallback); + mNetworkConnectivityCallback = null; } /**