如何在 Google Cast Framework 中为 Android 自定义 Cast 对话框

How to customize Cast Dialog in the Google Cast Framework for Android

我正在尝试自定义 Google Cast SDK 的投射对话框(当您点击投射按钮并显示可用设备列表时显示),但我还没有找到实现它的方法。

目前,它只显示一个 AlertDialog,其中包含要连接的可用设备列表。

我想做的是打开一个 Activity,它将显示带有我自己的 UI 实现的设备列表。

这是我要修改的对话框:

我发现了有关此 SDK 的许多自定义方面,但与此对话框无关。

所以我想出了一个方法来实现这个, 首先,我创建了一个覆盖 MediaRouteActionProvider 的 class(这是控制该按钮功能的主要 class)

public class CustomMediaRouteActionProvider extends androidx.mediarouter.app.MediaRouteActionProvider {

    public CustomMediaRouteActionProvider(Context context) {
        super(context);
    }

    @Override
    public MediaRouteButton onCreateMediaRouteButton() {
        return new CastButton(getContext());
    }
}

然后你需要用你自己的功能覆盖按钮的功能,在我的例子中,我打开了一个新的 activity。

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 更改为您的自定义 class(在本例中为 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>

你有关于最终结果的更多细节吗?我需要做类似的事情,但我不明白你是怎么做到的