如何通过投射控制接口捕获 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() 以便在用户与这些控件交互时收到通知。
我在我的应用程序中构建了一个完美运行的自定义演员表发送器 - 我需要添加的唯一功能是一种监听 '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() 以便在用户与这些控件交互时收到通知。