diff --git a/homeassistant/components/universal/media_player.py b/homeassistant/components/universal/media_player.py
index 7ffd8b9d13d..f33db3827af 100644
--- a/homeassistant/components/universal/media_player.py
+++ b/homeassistant/components/universal/media_player.py
@@ -72,6 +72,8 @@ from homeassistant.const import (
     STATE_IDLE,
     STATE_OFF,
     STATE_ON,
+    STATE_PAUSED,
+    STATE_PLAYING,
     STATE_UNAVAILABLE,
     STATE_UNKNOWN,
 )
@@ -94,8 +96,15 @@ CONF_ATTRS = "attributes"
 CONF_CHILDREN = "children"
 CONF_COMMANDS = "commands"
 
-OFF_STATES = [STATE_IDLE, STATE_OFF, STATE_UNAVAILABLE, STATE_UNKNOWN]
-
+STATES_ORDER = [
+    STATE_UNKNOWN,
+    STATE_UNAVAILABLE,
+    STATE_OFF,
+    STATE_IDLE,
+    STATE_ON,
+    STATE_PAUSED,
+    STATE_PLAYING,
+]
 ATTRS_SCHEMA = cv.schema_with_slug_keys(cv.string)
 CMD_SCHEMA = cv.schema_with_slug_keys(cv.SERVICE_SCHEMA)
 
@@ -614,9 +623,15 @@ class UniversalMediaPlayer(MediaPlayerEntity):
 
     async def async_update(self):
         """Update state in HA."""
-        for child_name in self._children:
-            child_state = self.hass.states.get(child_name)
-            if child_state and child_state.state not in OFF_STATES:
-                self._child_state = child_state
-                return
         self._child_state = None
+        for child_name in self._children:
+            if (child_state := self.hass.states.get(child_name)) and STATES_ORDER.index(
+                child_state.state
+            ) >= STATES_ORDER.index(STATE_IDLE):
+                if self._child_state:
+                    if STATES_ORDER.index(child_state.state) > STATES_ORDER.index(
+                        self._child_state.state
+                    ):
+                        self._child_state = child_state
+                else:
+                    self._child_state = child_state
diff --git a/tests/components/universal/test_media_player.py b/tests/components/universal/test_media_player.py
index d4fe2ce64ae..c50c3e97713 100644
--- a/tests/components/universal/test_media_player.py
+++ b/tests/components/universal/test_media_player.py
@@ -422,6 +422,12 @@ async def test_active_child_state(hass, mock_states):
     await ump.async_update()
     assert mock_states.mock_mp_1.entity_id == ump._child_state.entity_id
 
+    mock_states.mock_mp_1._state = STATE_PAUSED
+    mock_states.mock_mp_1.async_schedule_update_ha_state()
+    await hass.async_block_till_done()
+    await ump.async_update()
+    assert mock_states.mock_mp_2.entity_id == ump._child_state.entity_id
+
     mock_states.mock_mp_1._state = STATE_OFF
     mock_states.mock_mp_1.async_schedule_update_ha_state()
     await hass.async_block_till_done()