diff --git a/src/com/android/settings/media/MediaOutputIndicatorWorker.java b/src/com/android/settings/media/MediaOutputIndicatorWorker.java
index 09e0672..bf1e06e 100644
--- a/src/com/android/settings/media/MediaOutputIndicatorWorker.java
+++ b/src/com/android/settings/media/MediaOutputIndicatorWorker.java
@@ -165,6 +165,13 @@
         return mPackageName;
     }
 
+    /** Check if this device supports LE Audio Broadcast feature */
+    public boolean isBroadcastSupported() {
+        LocalBluetoothLeBroadcast broadcast =
+                mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile();
+        return broadcast != null ? true : false;
+    }
+
     public boolean isDeviceBroadcasting() {
         LocalBluetoothLeBroadcast broadcast =
                 mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile();
diff --git a/src/com/android/settings/notification/MediaVolumePreferenceController.java b/src/com/android/settings/notification/MediaVolumePreferenceController.java
index 2466b77..0ddba08 100644
--- a/src/com/android/settings/notification/MediaVolumePreferenceController.java
+++ b/src/com/android/settings/notification/MediaVolumePreferenceController.java
@@ -93,7 +93,7 @@
 
     @VisibleForTesting
     boolean isSupportEndItem() {
-        return isConnectedBLEDevice();
+        return getWorker() != null && getWorker().isBroadcastSupported() && isConnectedBLEDevice();
     }
 
     private boolean isConnectedBLEDevice() {
diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java
index 2339f4c..cd06bae 100644
--- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java
@@ -38,11 +38,14 @@
 import android.media.session.PlaybackState;
 import android.net.Uri;
 
+import com.android.settings.bluetooth.Utils;
 import com.android.settings.slices.ShadowSliceBackgroundWorker;
 import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
 import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
 import com.android.settingslib.bluetooth.BluetoothEventManager;
+import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
 import com.android.settingslib.media.LocalMediaManager;
 
 import org.junit.Before;
@@ -69,13 +72,17 @@
     @Mock
     private BluetoothEventManager mBluetoothEventManager;
     @Mock
-    private LocalBluetoothManager mLocalBluetoothManager;
+    private LocalBluetoothManager mLocalBtManager;
+    @Mock
+    private LocalBluetoothProfileManager mLocalBluetoothProfileManager;
     @Mock
     private MediaSessionManager mMediaSessionManager;
     @Mock
     private MediaController mMediaController;
     @Mock
     private LocalMediaManager mLocalMediaManager;
+    @Mock
+    private LocalBluetoothLeBroadcast mLeAudioBroadcastProfile;
 
     private Context mContext;
     private MediaOutputIndicatorWorker mMediaOutputIndicatorWorker;
@@ -84,14 +91,18 @@
     private List<MediaController> mMediaControllers = new ArrayList<>();
     private PlaybackState mPlaybackState;
     private MediaController.PlaybackInfo mPlaybackInfo;
+    private LocalBluetoothManager mLocalBluetoothManager;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mShadowApplication = ShadowApplication.getInstance();
         mContext = spy(RuntimeEnvironment.application);
-        ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
+        ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBtManager;
+        mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
         when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager);
+        when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager);
+        when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(null);
         mMediaOutputIndicatorWorker = new MediaOutputIndicatorWorker(mContext, URI);
         doReturn(mMediaSessionManager).when(mContext).getSystemService(MediaSessionManager.class);
         mMediaControllers.add(mMediaController);
@@ -284,4 +295,22 @@
 
         assertThat(mMediaOutputIndicatorWorker.getActiveLocalMediaController()).isNull();
     }
+
+    @Test
+    public void isBroadcastSupported_leAudioBroadcastProfileIsNull_returnFalse() {
+        mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager;
+        mMediaOutputIndicatorWorker.onSlicePinned();
+
+        assertThat(mMediaOutputIndicatorWorker.isBroadcastSupported()).isFalse();
+    }
+
+    @Test
+    public void isBroadcastSupported_leAudioBroadcastProfileNotNull_returnTrue() {
+        mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager;
+        mMediaOutputIndicatorWorker.onSlicePinned();
+        when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile())
+                .thenReturn(mLeAudioBroadcastProfile);
+
+        assertThat(mMediaOutputIndicatorWorker.isBroadcastSupported()).isTrue();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java
index 56e83bb..2d023d7 100644
--- a/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java
@@ -113,13 +113,23 @@
 
     @Test
     public void isSupportEndItem_withBleDevice_returnsTrue() {
+        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
         doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
 
         assertThat(mController.isSupportEndItem()).isTrue();
     }
 
     @Test
+    public void isSupportEndItem_notSupportedBroadcast_returnsFalse() {
+        doReturn(false).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
+        doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
+
+        assertThat(mController.isSupportEndItem()).isFalse();
+    }
+
+    @Test
     public void isSupportEndItem_withNonBleDevice_returnsFalse() {
+        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
         doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
 
         assertThat(mController.isSupportEndItem()).isFalse();
@@ -127,6 +137,7 @@
 
     @Test
     public void getSliceEndItem_NotSupportEndItem_getsNullSliceAction() {
+        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
         doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
 
         final SliceAction sliceAction = mController.getSliceEndItem(mContext);
@@ -136,6 +147,7 @@
 
     @Test
     public void getSliceEndItem_deviceIsBroadcasting_getsBroadcastIntent() {
+        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
         doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
         doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
         doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
@@ -155,6 +167,7 @@
         final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
         when(((BluetoothMediaDevice) device).getCachedDevice()).thenReturn(cachedDevice);
         when(device.isBLEDevice()).thenReturn(true);
+        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
         doReturn(device).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
         doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
         doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
