如何通过投射控制接口捕获 UIMediaController 点击

How to capture UIMediaController clicks via casting control interface

我在我的应用程序中构建了一个完美运行的自定义演员表发送器 - 我需要添加的唯一功能是一种监听 'Play/Pause' 和 'Skip' 按钮的方法,但是 Google 的文档(就我所能搜索到的而言)没有提供任何线索,并且在添加 Advanced Cast Features Docs 中显示的功能后不起作用:

CastMediaOptions castMediaOptions = new CastMediaOptions.Builder()
     .setMediaIntentReceiverClassName(CastIntentReceiver.class.getName())
     .build();

return new CastOptions.Builder()
        .setReceiverApplicationId(context.getString(R.string.cast_id))
        .setCastMediaOptions(castMediaOptions)
        .build();

我有一个 CastIntentReceiver 扩展了 MediaIntentReceiver,在 CastOptionsProvider 和清单中引用了它。

public class CastIntentReceiver extends MediaIntentReceiver {

    public static String TAG = "CastIntentReceiver";

    public CastIntentReceiver() {
        Log.i(TAG, "CastIntentReceiver: Constructed!");
    }
    ...
    // The rest of the Override methods don't do anything

}

接收器正在工作,因为 Log 打印正在工作,但是 none 的 Override 方法被调用(没有 Log 打印)。

以下是我的实施的一些额外细节:

所有转换函数都在两个单独的 类 中,CastManager(控制器)和 CastControls 片段(视图)被添加到 MainActivity 视图(类似于 YouTube)的基础上。这两者之间也有触发事物的接口 类.

在 CastManager 中,我设置 UIMediaController 并绑定视图:

View view = CastingBridge.CAST_CONTROLS_VIEW.findViewById(R.id.cast_drawer_controls);

uiMediaController = new UIMediaController(activity);
SeekBar seekBar = (SeekBar) view.findViewById(R.id.cast_control_seek_bar);
TextView start = (TextView) view.findViewById(R.id.cast_control_time_start);
TextView end = (TextView) view.findViewById(R.id.cast_control_time_end);
ImageButton playPauseButton = (ImageButton) view.findViewById(R.id.cast_control_play_pause);
ImageButton rewindButton = (ImageButton) view.findViewById(R.id.cast_control_rewind);
ImageButton forwardButton = (ImageButton) view.findViewById(R.id.cast_control_forward);
ImageButton stopButton = (ImageButton) view.findViewById(R.id.cast_control_stop);
ProgressBar loadingSpinner = (ProgressBar) view.findViewById(R.id.cast_control_loading);

如前所述,所有这些都按预期工作,但我需要监听(捕获)touch/click 事件,以便在视频暂停或停止时,我可以保存当前观看时长简历用途。

如何实现 MediaIntentReceiver 来监听这些事件?我已尝试将点击侦听器添加到各个视图,但正如预期的那样,@Override onClick 删除了最初的预期功能。

documentation 指定了似乎是我需要的方法,但是如何引用它?

我还尝试添加唯一可用的侦听器 UIMediaController:

uiMediaController.setPostRemoteMediaClientListener(new RemoteMediaClient.Listener() {
    @Override
    public void onStatusUpdated() {
        Log.i(TAG, "onStatusUpdated: Status Updated");
    }
});

但是,这不会执行任何操作,因为 onStatusUpdated 方法不提供任何参数。

任何人都可以帮我解释一下吗?我一直在尝试不同的东西并搜索了几天,所以是时候寻求帮助了。

谢谢!

您定义的接收器(通常是 MediaIntentReceiver)用于处理来自通知、锁屏和投射对话框的操作;因此,拥有一个自定义的会影响从这些地方启动时的行为。如果您使用的是 UIMediaController,那么您需要使用 onSendingRemoteMediaRequest() 以便在用户与这些控件交互时收到通知。