diff --git a/src/com/android/car/settings/sound/VolumeSettingsPreferenceController.java b/src/com/android/car/settings/sound/VolumeSettingsPreferenceController.java
index fae748e..eaa9e0e 100644
--- a/src/com/android/car/settings/sound/VolumeSettingsPreferenceController.java
+++ b/src/com/android/car/settings/sound/VolumeSettingsPreferenceController.java
@@ -61,6 +61,35 @@
     private final List<SeekBarPreference> mVolumePreferences = new ArrayList<>();
     private final VolumeSettingsRingtoneManager mRingtoneManager;
 
+    @VisibleForTesting
+    final CarAudioManager.CarVolumeCallback mVolumeChangeCallback =
+            new CarAudioManager.CarVolumeCallback() {
+                @Override
+                public void onGroupVolumeChanged(int zoneId, int groupId, int flags) {
+                    if (mCarAudioManager != null) {
+                        int value = mCarAudioManager.getGroupVolume(groupId);
+
+                        for (SeekBarPreference volumePreference : mVolumePreferences) {
+                            Bundle extras = volumePreference.getExtras();
+                            if (extras.getInt(VOLUME_GROUP_KEY) == groupId) {
+                                // Only setValue if the value is different, since changing the
+                                // seekbar of the volume directly will trigger CarVolumeCallback as
+                                // well, causing janky movement.
+                                if (volumePreference.getValue() != value) {
+                                    volumePreference.setValue(value);
+                                }
+                                break;
+                            }
+                        }
+                    }
+                }
+
+                @Override
+                public void onMasterMuteChanged(int zoneId, int flags) {
+                    // Mute is not being used yet
+                }
+            };
+
     private final ServiceConnection mServiceConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
@@ -77,6 +106,7 @@
                             volumeItem.getTitle());
                     mVolumePreferences.add(volumePreference);
                 }
+                mCarAudioManager.registerCarVolumeCallback(mVolumeChangeCallback);
 
                 refreshUi();
             } catch (CarNotConnectedException e) {
@@ -177,6 +207,7 @@
 
     private void cleanupAudioManager() {
         cleanUpVolumePreferences();
+        mCarAudioManager.unregisterCarVolumeCallback(mVolumeChangeCallback);
         mCarAudioManager = null;
     }
 
diff --git a/tests/robotests/src/com/android/car/settings/sound/VolumeSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/sound/VolumeSettingsPreferenceControllerTest.java
index db54af2..5813c0d 100644
--- a/tests/robotests/src/com/android/car/settings/sound/VolumeSettingsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/sound/VolumeSettingsPreferenceControllerTest.java
@@ -18,6 +18,9 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -53,6 +56,7 @@
 @Config(shadows = {ShadowRingtoneManager.class})
 public class VolumeSettingsPreferenceControllerTest {
 
+    private static final int ZONE_ID = 1;
     private static final int GROUP_ID = 0;
     private static final int TEST_MIN_VOLUME = 0;
     private static final int TEST_VOLUME = 40;
@@ -122,6 +126,14 @@
     }
 
     @Test
+    public void onServiceConnected_registersVolumeCallback() {
+        mPreferenceControllerHelper.markState(Lifecycle.State.CREATED);
+        mController.refreshUi();
+
+        verify(mCarAudioManager).registerCarVolumeCallback(mController.mVolumeChangeCallback);
+    }
+
+    @Test
     public void testRefreshUi_serviceStarted_multipleCalls() {
         mPreferenceControllerHelper.markState(Lifecycle.State.CREATED);
 
@@ -158,4 +170,25 @@
         preference.getOnPreferenceChangeListener().onPreferenceChange(preference, TEST_NEW_VOLUME);
         verify(mCarAudioManager).setGroupVolume(GROUP_ID, TEST_NEW_VOLUME, 0);
     }
+
+    @Test
+    public void onGroupVolumeChanged_sameValue_doesNotUpdateVolumeSeekbar() {
+        mPreferenceControllerHelper.markState(Lifecycle.State.CREATED);
+        mController.refreshUi();
+        SeekBarPreference preference = spy((SeekBarPreference) mPreferenceGroup.getPreference(0));
+        mController.mVolumeChangeCallback.onGroupVolumeChanged(ZONE_ID, GROUP_ID, /* flags= */ 0);
+
+        verify(preference, never()).setValue(any(Integer.class));
+    }
+
+    @Test
+    public void onGroupVolumeChanged_differentValue_updatesVolumeSeekbar() {
+        mPreferenceControllerHelper.markState(Lifecycle.State.CREATED);
+        mController.refreshUi();
+        when(mCarAudioManager.getGroupVolume(GROUP_ID)).thenReturn(TEST_NEW_VOLUME);
+        mController.mVolumeChangeCallback.onGroupVolumeChanged(ZONE_ID, GROUP_ID, /* flags= */ 0);
+
+        SeekBarPreference preference = (SeekBarPreference) mPreferenceGroup.getPreference(0);
+        assertThat(preference.getValue()).isEqualTo(TEST_NEW_VOLUME);
+    }
 }
