我已经在我的应用程序中构建了一个自定义 Actor 发送器,可以完美运行-我需要添加的唯一功能是一种监听“播放/暂停”和“跳过”按钮的方法,但是Google的文档(据我所知)能够搜索)没有任何线索,并且添加了ojit_a中显示的功能后不起作用:
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
和 list 中引用的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
}
接收器正在工作,因为日志打印正在工作,但是没有调用Override方法(没有日志打印)。
以下是有关我的实现的其他一些详细信息:
所有转换功能都位于两个单独的类中,分别是CastManager( Controller )和CastControls fragment ( View ),它们已添加到MainActivity View(类似于YouTube)的基础中。在这两个类之间也有触发事件的接口(interface)。
在CastManager中,我设置
UIMediaController
并绑定(bind) View :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);
如前所述,所有这些工作均应正常进行,但是我需要监听(捕获)触摸/单击事件,以便在暂停或停止视频时可以保存当前的观看时长以用于恢复。
如何实现
MediaIntentReceiver
来监听这些事件?我曾尝试将点击监听器添加到各个 View ,但是正如预期的那样,@Override onClick
删除了最初的预期功能。Advanced Cast Features Docs指定似乎是我需要的方法,但是如何引用呢?
我还尝试将唯一可用的监听器添加到
UIMediaController
:uiMediaController.setPostRemoteMediaClientListener(new RemoteMediaClient.Listener() {
@Override
public void onStatusUpdated() {
Log.i(TAG, "onStatusUpdated: Status Updated");
}
});
但是,此操作无济于事,因为
onStatusUpdated
方法不提供任何参数。任何人都可以帮助我对此有所了解吗?我一直在尝试不同的事情,现在已经搜索了几天,所以有时间寻求帮助。
谢谢!
最佳答案
您定义的接收器(通常是MediaIntentReceiver)用于处理通知,锁屏和转换对话框中的操作;因此,拥有自定义名称会影响从这些位置启动该行为时的行为。如果您使用的是UIMediaController,则当用户与这些控件进行交互时,需要使用onSendingRemoteMediaRequest()来得到通知。
关于android - 如何通过转换控制界面捕获UIMediaController点击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38682994/