Итак, я нашел способ достичь этого. Сначала я создал класс, который переопределяет MediaRouteActionProvider (это основной класс, который контролирует функциональность этой кнопки)
public class CustomMediaRouteActionProvider extends androidx.mediarouter.app.MediaRouteActionProvider {
public CustomMediaRouteActionProvider(Context context) {
super(context);
}
@Override
public MediaRouteButton onCreateMediaRouteButton() {
return new CastButton(getContext());
}
}
Затем выВам нужно переопределить функциональность кнопки своей собственной, в моем случае я открываю новое действие.
public class CastButton extends MediaRouteButton {
public CastButton(Context context) {
this(context, null);
}
public CastButton(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.mediaRouteButtonStyle);
}
public CastButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean performClick() {
Intent i = new Intent(getContext(), RemoteDevicesActivity.class);
getContext().startActivity(i);
return true;
}
}
Наконец, вам нужно изменить xml, содержащий эту кнопку (я предполагаю, что вы уже реализовалиэта часть)
Измените поле app: actionProviderClass с вашим пользовательским классом (в данном случае CustomMediaRouteActionProvider) и все готово.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:title="@string/connect_to"
android:id="@+id/cast"
app:actionProviderClass="CustomMediaRouteActionProvider"
app:showAsAction="ifRoom" />
</menu>